我具有波纹管功能,该功能应该在清单帖子中的媒体之间循环播放,以获得likes
和numComments
之类的“统计信息”。但是问题是,开始的循环:for val in mediaDict
像下面的 media4 {},media2 {} ...一样随机循环,而不是:media1 {} 2,依此类推上。
我该如何解决?
我尝试通过获取media num的值并将其传递到media对象的数组来解决此问题,但我认为即使它们是随机顺序的,理想的解决方案是将firebase函数循环按正确的顺序进行。
var indexForStats = 0
func getMediaStats() {
print("stats index val", indexForStats)
databaseRef.child("MediaStats").child((post?.user.userID)!).child(postPath).observeSingleEvent(of: DataEventType.value) { (snap) in
print(snap, " This is the snapshot")
if snap.value is NSNull {
print("No stats (comments or likes)")
} else {
let mediaDict = snap.value as! [String: Any]
for val in mediaDict {
let mediaString = val.key
let lastCharacter = mediaString.last
let mediaNumber = Int(String(lastCharacter!))
print(val, " This sis val !!!")
let statsDict = val.value as! [String: Int]
print(mediaNumber!, " This is the media number")
if statsDict["likes"] != nil {
let likes = statsDict["likes"]!
self.post?.media[mediaNumber! - 1].likes = likes
} else {
print("No likes while fetching")
self.post?.media[mediaNumber! - 1].likes = 0
}
if statsDict["numComments"] != nil {
let comments = statsDict["numComments"]!
self.post?.media[mediaNumber! - 1].numberComments = comments
} else {
print("No comments")
self.post?.media[mediaNumber! - 1].numberComments = 0
}
self.indexForStats += 1
}
}
}
}
输出:印刷品的输出(mediaNumber,“此介质号”)
可选(3),显示介质号
可选(1)该介质号 ...
答案 0 :(得分:0)
不能保证字典中条目的顺序。只有每个唯一键都会返回相应的值。
是的,由于它取决于密钥的哈希值,因此它会随机出现。
答案 1 :(得分:0)
您需要做两件事:
DataSnapshot.children
以确保您处理订单。在代码中:
databaseRef.child("MediaStats").child((post?.user.userID)!).child(postPath)
queryOrderedByKey().observeSingleEvent(of: DataEventType.value) { (snap) in
print(snap, " This is the snapshot")
if !snap.exists() {
print("No stats (comments or likes)")
} else {
for child in snapshot.children.allObjects as! [FIRDataSnapshot] {
print(child.key)
let statsDict = child.value as! [String: Int]
print(statsDict["likes"])
}
}