вызов обработчика завершения Firebase Swift - PullRequest
0 голосов
/ 14 мая 2018

Это может быть много работы для извлечения одного значения из firebase и получения его, чтобы я мог использовать его вне замыкания, но я не могу заставить что-нибудь упростить работу ...

Хотя у меня может быть, а может и нет, создать приличный обработчик, пока он не выдает ошибок, пока я не попытаюсь вызвать его с помощью, а затем я получаю: Невозможно преобразовать значение типа 'String' в ожидаемый тип аргумента '(String) - > () '

A: Как вызвать функцию? Б: Есть ли более простой способ сделать это?

var myName = ""

func getMyName(completion: @escaping (String) -> ()){
    if let uid = Auth.auth().currentUser?.uid{
        databaseRef.child("bodhi").child((uid)).observeSingleEvent(of: .value, with: { (snapshot) in
            if let bodhiDict = snapshot.value as? [String: AnyObject]
            {
                let myName = (bodhiDict["Name"] as? String)!
                print ("myName in the closure: \(myName)")
                completion(myName)
            } else {
                completion("")
            }
        })
    }
}

getMyName(completion: (myName))
print ("myName Outside the closure: \(myName)")

1 Ответ

0 голосов
/ 14 мая 2018

Ваш звонок на getMyName неверный.Измените:

getMyName(completion: (myName))
print ("myName Outside the closure: \(myName)")

на:

getMyName(completion: { (name) in
    print("Received \(name)")
})

или:

getMyName() { (name) in
    print("Received \(name)")
}

Как видите, первая переменная myName, которую вы объявили внефункция не нужна.

...