У меня есть нижеприведенная функция, которая должна циклически перебирать медиа в листинге, чтобы получить «статистику», такую как likes
и numComments
. Проблема, однако, заключается в том, что цикл, который запускается: for val in mediaDict
, кажется, зацикливается случайным образом, как следующие media4 {}, media2 {} ... вместо: media1 {} 2 и так далее.
Как я могу это исправить?
Я попытался исправить это, получив значение media num и передав его в массив объектов мультимедиа, и все же я думаю, что даже они находятся в случайном порядке. Идеальным решением было бы иметь цикл функции 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) Этот номер носителя
...