Swift Firestore搜索用户

时间:2018-11-30 17:29:44

标签: swift firebase search google-cloud-firestore querying

我已经实现了使用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:

-玛丽

1 个答案:

答案 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
    }
}

我希望这会有所帮助。