У меня есть следующий запрос Firebase, где я проверяю, существует ли имя пользователя в базе данных. Я хотел бы присвоить логическое значение (true) переменной, называемой usernameAlreadyExists. Однако мне нужно получить доступ к этой переменной с ее новым значением за пределами закрытия. Я прочитал, что для этого мне нужно реализовать checkHandler или обратный вызов. Тем не менее, я не знаю, как реализовать это в Firebase синтаксиса запросов:Доступ к переменной в закрытии Firebase
var usernameAlreadyExists = false
FIRDatabase.database().reference().child("usernames").queryOrderedByValue().queryEqual(toValue: self.username.text).queryLimited(toFirst: 1).observe(.childAdded, with: { snapshot in
// Username unavailable, chose another one
self.invalidUsernameMsg.text = "This username already exists, please choose another one."
print(snapshot)
print(snapshot.value)
usernameAlreadyExists = true
})
print(usernameAlreadyExists)
печати (usernameAlreadyExists) -> Я хочу, чтобы эта строка для печати «истинный», но он печатает «ложь», потому что приведенный выше код выполняется асинхронно.
Любая помощь более чем приветствуется. Спасибо!
Большое спасибо за объяснение prettyitgirl.com! Однако мне нужно будет получить доступ к этой переменной за пределами закрытия. Я представил это ** print() ** в текущем примере, чтобы отразить поведение, которое должен иметь код. Но позже мне нужно будет использовать измененное значение (от false до true) переменной в моем коде. Мне нужно будет запустить некоторый код в зависимости от значения переменной следующим образом: ** если usernameAlreadyExists {// Сделать что-то} else {// Сделать что-то еще} **. Есть ли способ сделать это? Еще раз спасибо! – ayarem502
Привет, я предполагаю, что вы выполняете эту проверку 'usernames' для вашей ** подписки **, правильно? Или вы хотите подтвердить правильность имени пользователя, как только пользователь закончит или перестанет печатать текст в текстовом поле? – Glenn
Это правильно. Я хочу проверить имя пользователя до того, как пользователь зарегистрируется. Идея состоит в том, что пользовательская информация будет записана в базу данных в конце процесса регистрации. Таким образом, если пользователь убивает приложение в середине процесса регистрации, данные не будут записаны в БД.Приведенный выше код позволяет мне определить, было ли уже введено имя пользователя в режиме реального времени. Тем не менее, мне нужен способ проверить, не было ли имя пользователя не принято, и насколько я знаю, вы не можете сделать это с помощью запроса Firebase, поэтому я хочу получить результат запроса выше и использовать его в качестве ссылки , – ayarem502