我正在尝试实现一个搜索栏,以便基于搜索查询填充一个表视图。我只是在这里寻找用户名。
数据结构:
"Users"
-"UID"
-"Username"
我在搜索栏中输入了一个文本的查询。我可以把搜索结果打印出来,所以我知道他们会回来的。但是,我不能从查询闭包中分离数据,并且不知道该做什么
我尝试构建一个内部数组,然后将外部数组设置为它,但是它总是包含零值。我知道我的for-循环正在运行,而且我知道值正在返回。他们只是没有被拯救。
self.filteredNameList = []
let searchText = searchText.lowercased()
let userQuery = ref.queryOrdered(byChild: "username").queryStarting(atValue: searchText)
userQuery.observeSingleEvent(of: .value, with: { (snapshot) in
for snap in snapshot.children {
let userSnap = snap as! FIRDataSnapshot
let userDict = userSnap.value as! [String: AnyObject]
let name = userDict["username"] as! String
self.filteredNameList.append(name)
}
self.tableView.reloadData()
print("Inside closure: \(self.filteredNameList)")
})
print("Outside closure: \(self.filteredNameList)")
}
我该怎么办?谢谢-基南
发布于 2017-01-13 12:53:56
下面是一个经过测试的例子
给出一个火基结构
users
uid_0
name: "bill"
uid_1
name: "leroy"
uid_2
name: "frank"
uid_3
name: "leon"
我们希望返回以“le”开头的所有节点,并将它们存储在一个数组中。
var namesArray = [String]() //note this is stored outside the function so other
//functions can access it.
func getSomeLe() {
self.namesArray = [] //init it any time this func is called.
let usersRef = ref.child("users")
let queryRef = usersRef.queryOrdered(byChild: "name").queryStarting(atValue: "le")
queryRef.observeSingleEvent(of: .value, with: { (snapshot) in
for snap in snapshot.children {
let userSnap = snap as! FIRDataSnapshot
let uid = userSnap.key
let userDict = userSnap.value as! [String:AnyObject]
let name = userDict["name"] as! String
self.namesArray.append(name)
}
print(self.namesArray)
})
}
将数据存储在数组中并打印
“勒罗伊”,“里昂”
https://stackoverflow.com/questions/41642690
复制