如何使用 swift 和 firebase 正确使用完成处理程序?

Posted

技术标签:

【中文标题】如何使用 swift 和 firebase 正确使用完成处理程序?【英文标题】:How do I properly use completion handlers using 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")
        
    

【问题讨论】:

【参考方案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()
                    
                
)

【讨论】:

以上是关于如何使用 swift 和 firebase 正确使用完成处理程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Swift 使用 Firebase 正确观察两个连接节点

如何使用 Swift 中的 url 从 firebase 正确检索数据?

Swift 4和Firebase如何计算子值

新的 Firebase 数据导致 TableView 单元格闪烁 (Firebase/iOS/Swift)

读取引发的 Firebase 身份验证错误(Firebase 3.x 和 Swift)

(Firebase Xcode 12 iOS 14)如何正确调用和设置孩子?