我是新手。我正在尝试使用完成处理程序在代码中获取给定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")
}
}
}
答案 0 :(得分:0)
只需通过以下方式解决它:
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()
}
}
})