次のFirebaseのクエリでは、ユーザー名がデータベースにすでに存在するかどうかを確認します。私は、usernameAlreadyExistsという変数にブール値(真)を割り当てたいと思います。しかし、私はクロージャの外側で新しい変数を使ってこの変数にアクセスする必要があります。私は、これを行うためにcompletionHandlerまたはコールバックを実装する必要があることを読んでいます。しかし、私は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()**で表現しています。これは現在の例では、コードが持つべき振る舞いを反映しています。しかし、後で、私は自分のコードで変数の変更された値(偽から真)を使う必要があります。変数の値に応じていくつかのコードを実行する必要があります:** if usernameAlreadyExists {//何か} else {//何か他のもの} **。これを達成する方法はありますか?再度、感謝します! – ayarem502
こんにちは、私は**あなたの**サインアップのための 'usernames'のこの検証をしていると思いますよね?または、ユーザーがtextFieldで入力を完了するか、入力を停止するとすぐにユーザー名をすぐに検証したいですか? – Glenn
それは正しいです。ユーザーが登録される前にユーザー名を検証したいと思います。ユーザーの情報は、サインアッププロセスの最後にデータベースに書き込まれるという考え方です。こうすることで、登録プロセスの途中でユーザーがアプリを強制終了すると、DBにデータが書き込まれなくなります。上記のコードは、ユーザ名がすでにリアルタイムで取得されているかどうかを検出します。しかし、ユーザ名が取得されていないかどうかを確認する方法が必要です。Firebaseのクエリではこれを行うことができません。なぜ上記のクエリの結果を得て参照として使用したいのですか? 。 – ayarem502