我在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
中数据库的数据。 最佳答案
您的代码有几个小问题:
您应该在使用[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。我还对您的编码样式进行了一些改进,以帮助防止进一步的问题;)