我正在尝试查询数据库中最流行的主题标签。最受欢迎的主题标签帖子最多。首先,这是我的Hashtags数据库的样子
Hashtags
L firstHashtag
L post1: true
L post2: true
L post3: true
L post_count: 3
L secondHashtag
L post4: true
L post5: true
L post6: true
L post7: true
L post8: true
L post_count: 5
L thirdHashtag
L post9: true
L post_count: 1
我根据他们的帖子计数查询他们的顺序,并获取这样的8个最流行的主题标签:
func observePopularTags(completion: @escaping (String) -> Void) {
REF_HASHTAG.queryOrdered(byChild: "post_count").queryLimited(toLast: 8).observe(.childAdded, with: {
snapshot in
completion(snapshot.key)
})
}
然后我将它们添加到空数组
var hashtags: [String] = []
之后我调用一个函数来观察&在数组中插入流行的主题标签
func getHashtags() {
Api.HashTag.observePopularTags { (name) in
let hashtag = "#" + name
// This works, it prints out each popular hashtag
print(hashtag)
self.hashtags.append(hashtag)
}
// When I print out the whole array, it prints an empty array.
print("Hashtags: ", hashtags)
}
我在viewDidLoad方法中调用此函数。但是,当我打印数组时,它将其打印为空数组。为什么会这样?
答案 0 :(得分:1)
数据是从Firebase异步加载的。当您打印hashtags
时尚未完成加载。任何需要从Firebase访问数据的代码必须在完成处理程序中。所以:
func getHashtags() {
Api.HashTag.observePopularTags { (name) in
let hashtag = "#" + name
// This works, it prints out each popular hashtag
print(hashtag)
self.hashtags.append(hashtag)
print("Hashtags: ", hashtags)
}
}
另见我今天早些时候提出的this answer。