如何从 iOS/swift 中的闭包函数返回值?

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)

Ami*_*wad 2

这是行不通的。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)

您应该将完成块作为参数传递给函数并在完成块内执行它,而不是返回结果。