尝试将本地函数中Firebase的项目附加到全局数组(数组必须是本地的)

时间:2017-09-26 02:54:53

标签: arrays swift firebase firebase-realtime-database

我试图将Firebase中的值附加到数组中,但它没有追加(我知道这是因为调试器)。 Firebase不是问题,没有其他问题,只是因为值不会附加到全局数组,因为这些值附加在本地函数中,由于某种原因,它不会更改数组的值。

如何追加并实际更改statData数组的值(以便实际附加是本地的)。请不要询问Firebase树或我的代码的效率,只是请我在附加时需要帮助。

背景:我有一个集合视图,它有2个标签,这些标签将包含2个来自Firebase

的值的数组
var statData = [String]()

...
ref?.child("users").child(user!).observeSingleEvent(of: .value, with: { (snapshot) in
            // Get user value
            let value = snapshot.value as? NSDictionary
            let statret = value?["status"] as? String ?? ""
            self.statData.append(statret)
            self.statData.append(statret)
            self.statData.append(statret)

            // ...
        }) { (error) in
            print(error.localizedDescription)
        }

2 个答案:

答案 0 :(得分:0)

要声明你的数组,如果它是Strings的数组,你应该写:

var statData = [String]()

这将创建数组并将其初始化为Strings的空数组。

然后我不确定为什么你在代码中写了3次相同的行,但无论如何只有一次就够了:

self.statData.append(statRet)

另外,我不认为这个问题与你的数组是全局的事实有关,因为全局与否,你仍然可以以类似的方式向它添加一些数据。

这里的另一件事可能就是你的数组根本没有被填充的原因,就是从数据库中获取数据的方式。您可以这样编写代码:

// ...

guard userId != nil else {
   return
}

ref?.child("users").child(userId!).observeSingleEvent(of: .value, with: { (snapshot) in

      // ...

      // By using a guard statement here, you make sure that your status child does exist and represents a String. 
      //If not, the return statement will be called. 
      // You may consider adding a break point inside the else statement for debug, if you are still unable to get any data.

      guard let statRet = snapshot.childSnapshot(forPath: "status").value as? String else { return }

      self.statData.append(statRet)

      // ...

}) 

答案 1 :(得分:0)

首先,如果您在代码中显示您声明statData的位置,将会有所帮助。它看起来像这样吗?

var statData:[String] = []

从你的firebase句柄中我建议明确声明字典的类型:

let value = snapshot.value as? Dictionary<String,Any>

然后抓取status值:

let statret = value[“status”] as? String

从那里你可以将它附加到你的阵列:

self.statData.append(statret)

我认为你遇到的问题是,它实际上从未附加任何值,因为你的演员阵容失败了。如果这有帮助,请告诉我。