我刚刚开始使用Firebase,我对Swift来说是一个新手。
我正在尝试查询Firebase服务器中的数据
func getResults() -> [String] {
let queryRef = ref.childByAppendingPath("objects")
var results = [String]()
queryRef.queryOrderedByChild("name").observeEventType(.ChildAdded, withBlock: { (snapshot) in
if let number = snapshot.value["number"] as? String {
results.append(number)
}
})
return results
}
我知道查询是异步的,但是有没有办法让函数真正告诉函数等待结果然后返回它们?
编辑:
已完成的功能:
func getResults(completion: ((objects: [String] -> Void)) {
let queryRef = ref.childByAppendingPath("objects")
var results = [String]()
queryRef.queryOrderedByChild("name").observeEventType(.ChildAdded, withBlock: { (snapshot) in
if let number = snapshot.value["number"] as? String {
results.append(number)
}
if results.count == Int(snapshot.childrenCount) {
completion(objects: results)
}
})
}
答案 0 :(得分:1)
这是一个填充数组的解决方案,该数组将用作tableView数据源,或一系列坐标或帮助跟踪妻子的鞋子集合。
var emailArray = [String]()
users.observeSingleEventOfType(.Value, withBlock: { snapshot in
for child in snapshot.children {
let email = child.value.objectForKey("email")
emailArray.append(email!)
}
self.tableView.reloadData
})
Firebase看起来像
users
uid_0
email: "dude@thing.com"
uid_1
email: "person@thing.com"
您可能会将emailArray定义为类级别变量,因此您的tableView可以将其用作数据源 - 如果是这种情况,请使用self.emailArray.append ......
此外,此示例是usersNode的一次性加载。它不会继续观察节点的变化。