我正在尝试从Firebase检索字符串值,以便为每个用户名提供一个传递给该函数的唯一UID,该函数返回用户的用户名。但是 - 由于firebase 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”)来获取数据。想法?
答案 0 :(得分:7)
您需要像这样创建完成处理程序
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")
}
}