Swift 2.2 — значение не сохраняется после выполнения функции

#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. Спасибо. Я просто изменил функцию вызова таким образом: