Swift Firestore Поиск пользователей - PullRequest
0 голосов
/ 30 ноября 2018

Я уже реализовал функцию поиска пользователей, используя 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:

-Marie

1 Ответ

0 голосов
/ 30 ноября 2018

Прежде всего, начните с обработки ошибок.Ошибки в 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
    }
}

Я надеюсь, что этопомогает.

...