【问题标题】:How do I properly use completion handlers using swift & firebase?如何使用 swift 和 firebase 正确使用完成处理程序?
【发布时间】:2019-05-03 13:36:43
【问题描述】:

我是 swift 新手。我正在尝试使用完成处理程序在我的代码中获取给定 ID 的名字。我的问题是我希望我的处理程序在获取 ID 后执行,然后将返回的值分配给一个变量。我应该如何捕获返回的值并立即使用它?

这是我调用处理程序的代码以及 ID 和文本。

let userId = data["MessageUser"]

self!.getName(id: userId!, completion: { fname in
      print(fname)
}) /* How should I catch fname so that I can use it. */

let text = data["MessageText"]

这是完成处理程序的代码:

func getName(id: String, completion: @escaping (_ fname: String) -> Void) {
    let reference = Database.database().reference().child("users").child(id)

    reference.observe( .value) { (snap) in

        if let dictionaryWithData = snap.value as? [String:String],
            let fname = dictionaryWithData["Fname"]
        {
            completion(fname)
        } else {
            completion("error")
        }
    }
}

【问题讨论】:

    标签: ios swift firebase


    【解决方案1】:

    刚刚解决了:

    let userId = data["MessageUser"]
    
     self!.getName(id: userId!, completion: { fname in
    
                    let text = data["MessageText"]
    
                    if text != ""{
                        if let message = JSQMessage(senderId: userId, displayName: fname, text: text)
                        {
                            self?.messages.append(message)
    
                            self?.finishReceivingMessage()
                        }
                    }
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多