如何从FireBase读取数据

时间:2017-09-09 20:29:55

标签: ios swift firebase firebase-realtime-database

我在Swift中从Firebase读取时遇到问题。

以下是我的Firebase数据库:

enter image description here

这是我的代码:

var ref: FIRDatabaseReference!

override func viewDidLoad() {
    super.viewDidLoad()

    NSLog("Reading from DB")

    ref = FIRDatabase.database().reference()
    self.ref?.child("Frais").observeSingleEvent(of: .value, with: { (snapshot) in
        let value = snapshot.value as? [String: Int]
        var frpx1 = (value?["frpx1"]!)!
        var frpx10 = (value?["frpx10"]!)!
        var frpx11 = (value?["frpx11"]!)!
        var frpx12 = (value?["frpx12"]!)!
        var frpx13 = (value?["frpx13"]!)!
        var frpx14 = (value?["frpx14"]!)!
        var frpx15 = (value?["frpx15"]!)!
        var frpx16 = (value?["frpx16"]!)!            
    })

    print(frpx1)
    print(frpx10)
    print(frpx11)
    print(frpx12)
    print(frpx13)
    print(frpx14)
    print(frpx15)
    print(frpx16)
}

我没有发现问题。

我没有frpx1,...,frpx16中数据库中的数据。

1 个答案:

答案 0 :(得分:0)

您的代码有几个小问题:

  • 当您应该使用[String: Int]时, 将返回的值投射到[String: Any],因为并非所有值都基于String

  • 您正在外部打印完成处理程序。您需要等待处理程序被调用然后读取结果(即,方法observeSingleEvent返回时Firebase仍在处理您的请求)。

解决这两个问题应该让你前进:

...
self.ref?.child("Frais").observeSingleEvent(of: .value, with: { 
    (snapshot) in
    guard let value = snapshot.value as? [String: Any] else {
        print("Snapshot type mismatch: \(snapshot.key)")
        return
    }
    let frpx1  = value["frpx1"]
    let frpx10 = value["frpx10"]
    let frpx11 = value["frpx11"]
    ... 
    print(frpx1)
    print(frpx10)
    print(frpx11)
    ...
})

PS。我还改进了你的编码风格,以帮助防止进一步的问题;)