我在 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: Any]
时,您将返回值转换为[String: Int]
因为并非所有值都是基于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。我还稍微改进了您的编码风格,以帮助防止出现进一步的问题;)
关于ios - 如何从 FireBase 读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46134843/