Firebase异步查询

时间:2016-05-17 17:20:56

标签: ios swift firebase

我刚刚开始使用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)
        }
    })
}

1 个答案:

答案 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的一次性加载。它不会继续观察节点的变化。