【发布时间】:2019-08-28 18:52:36
【问题描述】:
我正在开发一个星级评分系统,用户可以在该评分系统中对某个项目进行 1 到 5 星评分,并查看所有用户的平均星级评分。
到目前为止,我已经能够将用户评分发送到我的 firebase 数据库,其中键值对由用户 ID 和他们作为 Double 的给定评分组成。我还可以检索所述数据并将其打印到控制台,但问题是我只需要在新数组中加倍评分即可计算平均评分;不是它附带的用户 ID 字符串。
如何将用户 ID 字符串和给定 Double 的评分分开,以便我只能使用评分数字?
我尝试创建一个新的空数组,并将 Firebase 中的分数 Double 附加到其中,但似乎没有任何效果,我不知道为什么。
使用以下代码,我可以打印出项目的键值对 (sentData1)
handle = ref.child(sentData1).observe(.value, with: { (snapshot) in
print(snapshot)
})
更新:我设法使用这段代码得到了我想要的东西:
ref.observe(.value) { (snapshot) in
if let data = snapshot.value as? [String: Any] {
let values = Array(data.values)
print(values)
}
}
但是,我现在遇到了一个奇怪的问题:当第一次启动应用程序并对不同的项目进行评分时,它可以完美地以数组格式 [2, 5, 3, 4] 显示项目获得的所有评分。但是,当我继续对更多项目进行评分时,它会随机开始给我两次数组,然后是三次,以此类推:
[4, 2, 3, 4]
[4, 2, 3, 4] [4, 2, 3, 4]
一段时间后它最终崩溃并给我错误消息
"Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value"
在将数据写入 Firebase 数据库的代码行中:
userDB.child(sentData2).child(UserID!).setValue(cosmosRating!)
【问题讨论】:
标签: ios swift firebase firebase-realtime-database