从Firebase数据库追加数据后,Array将打印为空

时间:2017-11-22 05:06:57

标签: ios swift firebase firebase-realtime-database

我正在尝试查询数据库中最流行的主题标签。最受欢迎的主题标签帖子最多。首先,这是我的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方法中调用此函数。但是,当我打印数组时,它将其打印为空数组。为什么会这样?

1 个答案:

答案 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