我试图将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)
}
答案 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)
我认为你遇到的问题是,它实际上从未附加任何值,因为你的演员阵容失败了。如果这有帮助,请告诉我。