我在Swift中从Firebase读取时遇到问题。
以下是我的Firebase数据库:
这是我的代码:
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
中数据库中的数据。
答案 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。我还改进了你的编码风格,以帮助防止进一步的问题;)