【发布时间】:2019-08-22 22:57:26
【问题描述】:
我正在使用 firebase 来存储我的应用中每个视频的观看次数。我想要的是从一个用户的所有视频中收集所有视图并显示视图总数。但是,我在获取数据并将所有字典值一起放入 Int/String 时遇到问题!
到目前为止,我已经尝试了许多不同的解决方案,但我仍然在字典的数组/值中得到所有不同的值,而不是把所有东西都添加到一个值中
这是我获取特定用户的所有视频视图的代码,到目前为止没有任何问题。当我打印“intConvert”时,我得到了不同行中的所有视图。
let ref = Database.database().reference().child("videoviews").child(stringUid)
ref.observe(.value, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject]{
let numbOfViews = dictionary["views"] as! String
let intConvert = Int(numbOfViews)!
let ArrayViews = [intConvert]
这是我的数据库结构:
**videoviews**
-Lb52VxrEqdSRGljJdP7
views: "25"
-Lb53ARq_lOHEbTruW8s
views: "273"
-Lb53A_cEyX3CYc4mKYn
views: "38"
编辑:如果我打印(字典),来自“if let dictionary = snapshot.value as? [String: Anyobject] 的字典看起来像这样:
["views": 642]
["views": 660]
["views": 628]
["views": 630]
["views": 615]
["views": 3]
["views": 0]
["views": 2]
["views": 1]
编辑:(我很困惑,忘记添加手镯,抱歉。) 当我这样做时,我“打印(dictionary.values)控制台看起来像这样(来自不同字典的键值):
[642]
[660]
[628]
[630]
[615]
[3]
[0]
[2]
[1]
然后我试着把它放在一个这样的循环中:
var bLoader = 0.0
for hejArray in 0...ArreyViews.count-1{
bLoader += Double(Arrej[hejArray])
}
但是当我打印“bLoader”时,我仍然会在不同的行中获得每个视频的所有视图,而不是收集在一个值中。
那么我需要做什么将 Firebase 中不同字典中的所有值放在一个变量中?
感谢我能得到的所有帮助,我可以想象这应该不会太难,但我错过了一些东西。
EDIT /// 终于找到问题了。我传入的“StringUid”具有不同数量的值,因此如果用户的视频数量为 9,则整个函数将被调用 9 次。最终工作的解决方案如下所示:
全局数组声明:
var myArray = [String]()
函数内部:
if let dictionary = snapshot.value as? [String: AnyObject]{
let numbOfViews = dictionary["views"] as! String
let intConvert = Int(numbOfViews)!
self.myArray.append(numbOfViews)
let intArray = self.myArray.map { Int($0)!}
let total = intArray.reduce(0, +)
self.totalViewsShower2.text = String(total)
提前谢谢你!
【问题讨论】:
标签: arrays swift firebase dictionary firebase-realtime-database