【问题标题】:How to return value from a closure function in iOS/swift? [duplicate]如何从 iOS/swift 中的闭包函数返回值? [复制]
【发布时间】:2016-11-04 11:44:20
【问题描述】:

我刚开始学习 IOS 开发,来自后端世界。我希望将用户 ID 传递给此函数并返回名称,所有数据都来自 Firebase。我目前试图打破闭包中的名称值的尝试不起作用,返回空字符串。我该如何构建此代码以使该“名称”变量返回。

    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
}

【问题讨论】:

    标签: ios swift asynchronous firebase closures


    【解决方案1】:

    这行不通。 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
    }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 2020-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多