读取Data Firebase分配值

时间:2019-05-07 14:55:38

标签: swift firebase firebase-realtime-database

我想将我在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]

1 个答案:

答案 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