Я пытаюсь написать функцию, которая возвращает значение из закрытия запроса Firebase.
К сожалению, я еще не полностью освоил замыкания и обработчики завершения.
Я хотел бы использовать и вызывать эту функцию следующим образом:
let name = userName(forUID: “UID01”)
, а не так:
let name = userName(forUID: "UID01") { name in
print(name)
}
Причина, по которой я хочу использовать этоЭто происходит потому, что эта функция будет вызываться во многих местах кода, и мне нравится сохранять мой код максимально чистым и лаконичным.Иначе, я могу объявить глобальную переменную и использовать self.name = name
внутри тела функции.Но если, например, я вызову эту функцию 5 раз, мне придется объявить 5 глобальных переменных ...
Функция выглядит так:
func userName(forUID: String, completion: @escaping (_ name: String) -> ()) {
var ref: DatabaseReference!
ref = Database.database().reference()
ref.child("users").child(forUID).observeSingleEvent(of: .value, with: { (snapshot) in
let data = snapshot.value as? NSDictionary
let name = data?["name"] as? String ?? ""
completion(name)
// ...
})
}