Я посмотрел несколько вопросов и примеров, но безрезультатно.Подход, который я использую для отображения массива постов, «должен работать» из того, что я вижу, но по какой-то причине я не могу получить доступ к паре ключ / значение внутри данных моего снимка ...
В приведенном ниже коде я могу создать postDict, и я вижу все данные, которые мне нужны, однако я не могу назначить значение userID, вместо проходящего через строку значения, я вижу следующее в консоли отладки: userID =(Строка) "\ 0 \ 0 \ 0"
Есть идеи?Спасибо!
static func allPosts(completion: @escaping ([Post]) -> Void) {
let postRef = Database.database().reference().child("posts")
postRef.observeSingleEvent(of: .value, with: { (snapshot) in
guard let snapshot = snapshot.children.allObjects as? [DataSnapshot]
else { return completion([]) }
let dispatchGroup = DispatchGroup()
var posts = [Post]()
for postSnap in snapshot {
guard let postDict = postSnap.value as? [String : AnyObject],
let userID = postDict["userID"] as? String
else { continue }
dispatchGroup.enter()
PostFirebase.getPostByKey(postKey: postSnap.key, userID: userID, completion: { (post) in
if let post = post {
posts.append(post)
print("posts array = \(posts)")
}
dispatchGroup.leave()
})
}
dispatchGroup.notify(queue: .main, execute: {
completion(posts.reversed())
})
})
}
Вот экспорт JSON из /posts
:
{
"Tzgb6023LzYV8lVJr3KHbosdtR72" : {
"-LQEw9M7DPZ0XugHdd7e" : {
"noCount" : 0,
"photoURL" : "https://firebasestorage.googleapis.com/...",
"postText" : "soAwesome",
"timestamp" : 5.62779748747864E8,
"userID" : "Tzgb6023LzYV8lVJr3KHbosdtR72",
"userPhotoURL" : "https://firebasestorage.googleapis.com/....",
"username" : "ninjaone ",
"videoURL" : "https://firebasestorage.googleapis.com/....",
"voteCount" : 2,
"yesCount" : 2
}
}
}