我想将我在Firebase数据库中读取的数据分配给代码中给定的值。正在使用我提供的代码读取数据,但未分配值。我想分配deviceroom1,deviceRoom2,deviceRoom3,deviceRoom4。
var deviceRoom1: String = ""
var deviceRoom2: String = ""
var deviceRoom3: String = ""
var deviceRoom4: String = ""
var deviceRoom5: String = ""
func fetchDevies(){
let ref = Database.database().reference().child(self.chip1InfoString!).child("Rooms")
ref.observeSingleEvent(of: .value, with: { (snapshot) in
let value = snapshot.value as? NSDictionary
if let deviceRooms1 = value?["Rooms1"] as? String {
self.deviceRoom1 = deviceRooms1
}
if let deviceRooms2 = value?["Rooms2"] as? String {
self.deviceRoom2 = deviceRooms2
}
if let deviceRooms3 = value?["Rooms3"] as? String {
self.deviceRoom3 = deviceRooms3
}
if let deviceRooms4 = value?["Rooms4"] as? String {
self.deviceRoom4 = deviceRooms4
}
if let deviceRooms5 = value?["Rooms5"] as? String {
self.deviceRoom5 = deviceRooms5
}
}) { (error) in
print(error.localizedDescription)
}
let items = [deviceRoom1, deviceRoom2, deviceRoom3, deviceRoom4, deviceRoom5]
答案 0 :(得分:1)
此问题是Firebase是异步的,因此您需要给Firebase时间来获取并返回所请求的数据。即该数据仅在闭包内有效。
您的代码正在闭包外分配 let items = ... 的值,并且该代码将在返回数据之前执行。像这样的闭包内部移动任务(为简洁起见,代码缩短了)
error: cannot apply ‘offsetof’ to a non constant address
{"id", T_INT, offsetof(PyBox, bx->id), 0, "Box id"},
^~~~~~~~
此外,请注意var名称。如果要访问类var,请始终以self引用它。就像self.deviceRoom1