我已经创建了一个应用程序,用户可以在其中搜索应用程序中的帖子(用户生成的帖子)。最近,它已经到了我无法立即加载所有用户而不会崩溃的地步。
旧功能将只加载整个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的工作方式)。您需要先在搜索栏中输入完整的单词。
我认为目前有一种方法可以自动完成搜索栏,因为它是大多数应用程序的标准配置。感谢您解决此问题的任何帮助。
我已经创建了一个应用程序,用户可以在其中搜索应用程序中的帖子(用户生成的帖子)。最近,它已经到了我无法立即加载所有用户而不会崩溃的地步。 ...
我的猜测是,每当用户更改搜索框中的文本时,您都在呼叫fetchUsers
。