#swift #function #if-statement #firebase-realtime-database
#swift #функция #if-оператор #firebase-база данных в реальном времени
Вопрос:
Я создал приведенную выше функцию, чтобы проверить, существует ли пользователь в базе данных Firebase:
func userExists(userUid: String) -> Bool {
var userExists: Bool = false
DBRef.child("users").child(userUid).observeSingleEventOfType(.Value, withBlock: { (snapshot: FIRDataSnapshot) in
if snapshot.exists(){
userExists = true
}else{
userExists = false
}
})
return userExists
}
Проблема в том, что функция userExists всегда возвращает «false», даже если переменная userExists установлена как true внутри withBlock . Любая помощь, пожалуйста? Спасибо!
Ответ №1:
Вы не должны использовать блоки возврата и закрытия в одной и той же функции, потому что функция вернет значение до выполнения блока. Вы можете использовать что-то вроде этого:
func userExists(userUid: String, completion: (exists: Bool) -> Void) {
var userExists: Bool = false
DBRef.child("users").child(userUid).observeSingleEventOfType(.Value, withBlock: { (snapshot: FIRDataSnapshot) in
if snapshot.exists(){
completion(true)
}else{
completion(false)
}
})
}
Затем вы просто вызываете:
if userExists(userId, completion: {
// Code here
})
Комментарии:
1. Это сработало, aramusss. Спасибо. Я только что изменил функцию вызова
2. Это сработало, aramusss. Спасибо. Я просто изменил функцию вызова таким образом: