我已经实现了使用FirebaseDatabase
这样搜索用户的功能:
REF_USERS.queryOrdered(byChild: "username_lowercase").queryEnding(atValue: text+"\u{f8ff}").queryLimited(toFirst: 25).queryStarting(atValue: text).observeSingleEvent(of: .value, with:
{
(snapshot) in
snapshot.children.forEach(
{
(s) in
let child = s as! DataSnapshot
if let dict = child.value as? [String: Any]
{
let user = UserInfo.createUser(dict: dict, key: child.key)
if user.id! != currentUserId
{
completion(user)
}
}
})
})
但是现在我决定从Database
切换到Firestore
,由于他们一直在吹嘘自己的查询很好,所以我觉得应该不会太难,但是几天我一直在努力寻找如何搜索用户的方法,但似乎无法完成。
那是我到目前为止的代码:
REF_USERS.order(by: "username_lowercased").limit(to: 25).order(by: text).getDocuments
{
(snapshot, error) in
snapshot?.documents.forEach(
{
(s) in
let child = s
let user = UserInfo.createUser(dict: child.data(), key: child.documentID)
if user.id! != currentUserId
{
completion(user)
}
})
}
但是就像我说的那样,什么都没有。
有什么建议吗?我真的很感激c:
-玛丽
答案 0 :(得分:1)
首先从处理错误开始。 Firestore中的错误具有很强的描述性,它们将指导您进行哪些操作才能使查询正常工作。
guard let snapshot = snapshot else {
// Make your completion handler work with errors as well so you can read / display them
// completion(nil, error)
// For now just print the error
print(error!)
return
}
另外,当您希望在满足条件时调用成功完成处理程序时,建议您仅使用for循环并在需要时中断:
for document in snapshot.documents {
if user.id! != currentUserId {
completion(user)
break
}
}
我希望这会有所帮助。