#google-cloud-firestore #swiftui
#google-облако-firestore #swiftui
Вопрос:
Я хочу написать функцию, в которой вводится имя пользователя, которое вводит пользователь, и оно сравнивается с именем пользователя в firestore, если оно существует, функция должна возвращать false, а если нет, должна возвращать true
Вот мой код.. Он всегда возвращает true, когда я его вызываю!
func checkUser(username: String)-> Bool{
var test = true
FirebaseReference(.user).getDocuments { (snap, err) in
if err != nil{
print((err?.localizedDescription)!)
return
}
for i in snap!.documents{
if username == i.get("username") as! String {
test = false
print("name already taken")
}
}
}
return test
}
Ответ №1:
Вы можете использовать логическую переменную, чтобы проверить, нашли ли вы подходящее имя, и вы можете установить для него значение true, если найдете совпадение.
Вы можете использовать следующий код:
func checkUsername(username: String, completion: @escaping (Bool) -> Void) {
// Get your Firebase collection
let collectionRef = db.collection("users")
// Get all the documents where the field username is equal to the String you pass, loop over all the documents.
collectionRef.whereField("username", isEqualTo: username).getDocuments { (snapshot, err) in
if let err = err {
print("Error getting document: (err)")
} else if (snapshot?.isEmpty)! {
completion(false)
} else {
for document in (snapshot?.documents)! {
if document.data()["username"] != nil {
completion(true)
}
}
}
}
}
Ответ №2:
Используйте Async Await
func checkUser(userId: String) async throws -> Bool {
let querySnapshot = try await db.collection(path)
.whereField("userId", isEqualTo: userId).getDocuments()
if querySnapshot.isEmpty {
return false
} else {
for document in (querySnapshot.documents) {
if document.data()["userId"] != nil {
return true
}
}
}
Инициализируйте с помощью Task
Task.init {
if try await self.userRepository.checkUser(userId: user.uid) == false {
self.userRepository.addUser(FBUser(id: user.uid,
name: "Anonymous user",
email: "No email on file",
createdTime: Timestamp(),
userId: user.uid))
}
}