Eva*_*art 5 closures asynchronous ios firebase swift
我刚刚开始学习 IOS 开发,来自后端世界。我希望将 userID 传递给此函数并返回名称,所有数据都来自 Firebase。我当前尝试将名称值从闭包中打破的尝试不起作用,返回空字符串。我如何构建这段代码才能返回“name”变量。
func getNameOfUser(uid: String) -> String {
var name: String = ""
FIRAuth.auth()?.signInAnonymouslyWithCompletion() { (user, error) in
self.ref = FIRDatabase.database().reference()
self.ref!.child("users").child(uid).child("name").observeSingleEventOfType(.Value, withBlock: { (snapshot) in
name = snapshot.value! as! String
}) { (error) in
print(error.localizedDescription)
}
}
return name
}
Run Code Online (Sandbox Code Playgroud)
这是行不通的。signInAnonymouslyWithCompletion()正在后台工作。
异步创建并成为匿名用户。
这意味着getNameOfUser()当执行完成块时,它的局部变量已经消失了。
func getNameOfUser(uid: String) -> String
{
var name: String = ""
FIRAuth.auth()?.signInAnonymouslyWithCompletion()
{ (user, error) in
// Executed somewhere in the future
}
// Executed immeditaly.
return name
}
Run Code Online (Sandbox Code Playgroud)
您应该将完成块作为参数传递给函数并在完成块内执行它,而不是返回结果。
| 归档时间: |
|
| 查看次数: |
4205 次 |
| 最近记录: |