我正在尝试从Firebase检索字符串值,以获取具有唯一UID的每个用户名,该UID传递给函数,该函数返回用户的用户名。但是-由于firebase ObserveEvent在中closures,我无法返回任何值,因为操作是 异步 发生的(?)。我想知道这是否是实现此目标的方法?
ObserveEvent
closures
该函数如下所示:
func GetUsername(uid:String) -> String { var username = String() firebase.child("Users").child(uid).observeSingleEventOfType(.Value) { (snapshot:FIRDataSnapshot) in username = snapshot.value!["Username"] as! String } return username }
显然这是行不通的,但是我希望能够通过执行GetUsername(“ whatevertheidmightbe”)来获取数据。有想法吗?
您需要像这样创建完成处理程序
func GetUsername(uid:String , completion: (String) -> ()) { firebase.child("Users").child(uid).observeSingleEventOfType(.Value) { (snapshot:FIRDataSnapshot) in if let username = snapshot.value!["Username"] as? String completion(username) } else { completion("") } }
然后这样调用函数
self.GetUsername(str) { (name) -> () in if name.characters.count > 0 { print(name) } else { print("Not found") } }