Как правильно использовать обработчики завершения, используя swift & firebase? - PullRequest
0 голосов
/ 03 мая 2019

Я новичок в Свифте. Я пытаюсь получить имя данного идентификатора в моем коде, используя обработчик завершения. Моя проблема в том, что я хочу, чтобы мой обработчик выполнялся после получения идентификатора, а затем присваивал возвращаемое значение переменной. как я должен поймать возвращенное значение и использовать его сразу?

Это мой код вызова обработчика вместе с идентификатором и текстом.

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 Ответ

0 голосов
/ 04 мая 2019

Только что решил:

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()
                    }
                }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...