我正在尝试检索某些值而不是其他值。实际上,我想按用户名搜索用户。
我尝试使用queryStarting(atValue: input)
和queryEnding(atValue: "u{f8ff}")
,但找不到正确的解决方案。
let input = searchInput.text?.lowercased()
print("Search for \(input!)")
let ref = Database.database().reference().child("Usernames").queryStarting(atValue: input).queryEnding(atValue: "u{f8ff}").queryOrderedByKey()
ref.observeSingleEvent(of: .value) { (snapshot) in
if snapshot.exists() {
for users in snapshot.children.allObjects as! [DataSnapshot] {
let user = users.value as? [String:AnyObject]
let id = user?["id"] as! String
Users.init(userId: (id))
print(users.key)
}
}
}
如您所见,我还添加了queryOrderedByKey()
。如果我不添加该部分,则它不会检索任何内容。
我想要的只是从我在文本字段中写的内容开始检索值。
Usernames
----- charles
----------id: charles's uid
----- pierre
----------id: pierre's uid
----- bob
----------id: bob's uid
----- lu
----------id: lu's uid
问题是,例如,如果输入为“ L”(以搜索lu),它将检索[lu]。然后,如果输入为“ Bo”(以搜索bob),它将检索[lu]和[bob],而不仅是我想要的[bob]。显然,如果输入为“ C”(用于搜索bob),它将检索[lu],[bob],[pierre],最后是[charles]。
答案 0 :(得分:0)
您当前的查询以正确的输入开始,但以u{f8ff}
结束-这意味着,如果您以bo
开头,您还会得到以c
,{{1 }}等
您需要做的就是以字符串开头的最大值结尾,例如对于d
的输入,您希望以bo
结尾。您可以通过将输入与该unicode值(即:
bo\u{f8ff}