Я создал приложение, в котором пользователи могут искать сообщения (созданные пользователями) в приложении. Недавно дошло до того, что я не могу загрузить всех пользователей одновременно без сбоев.
Старая функция просто загружает весь узел post
и затем фильтрует, как показано ниже. Можно ли воспроизвести что-то похожее на это с гораздо большим количеством данных?
self.posts.filter { (post) -> Bool in
return
post.title.lowercased().contains(searchText.lowercased())
}
Я создал новую функцию из чтения документации Firebase. Который предназначен для обработки большего количества данных.
Новая функция
var users = [User]()
fileprivate func fetchUsers(username: String) {
let ref = Database.database().reference().child("users").queryOrdered(byChild: "username").queryStarting(atValue: username).queryEnding(atValue: "\(username)\\uf8ff")
ref.observeSingleEvent(of: .value) { (snapshot) in
guard let dictionaries = snapshot.value as? [String: Any]
else { return }
dictionaries.forEach({ (key, value) in
if key == Auth.auth().currentUser?.uid {
return
}
guard let userDictionary = value as? [String: Any] else { return }
let user = User(uid: key, dictionary: userDictionary)
self.users.append(user)
})
self.users.sort(by: { (user1, user2) -> Bool in
return user1.username.compare(user2.username) == .orderedAscending
})
self.collectionView?.reloadData()
}
}
База данных Firebase
"users" : {
"0Udc81ELBJP7UpYiESqPj5gLDx9A" : {
"username" : "First_User"
},
"13ThJZlpkgUCcZ4zaRzzaAHFjat2" : {
"username" : "Test_User"
}
},
Эта функцияоднако он вялый и не выполняет автозаполнение, как раньше (аналогично тому, как это делает Instagram). Вам нужно набрать полные слова в строке поиска, прежде чем что-либо появится.
Я предполагаю, что есть способ иметь панель автозаполнения поиска, так как она в настоящее время стандартна для большинства приложений. Любая помощь в исправлении этого приветствуется.