arrays - 元素未从 FireBase 附加到数组

标签 arrays swift firebase firebase-realtime-database

我终于能够从 firebase 中提取数据,并且可以显示它,但由于某种原因它没有附加到我想要的数组,这是我的代码:

override func viewDidLoad() {
    super.viewDidLoad()
    var arr = [String]()
    DataService.instance.recievers.observeSingleEvent(of: .value) {(recipients: FIRDataSnapshot) in
        if let recievers = recipients.value as? [String]{
            for i in recievers{
                print(i)
                arr.append(i)
            }
        }
    }

    for i in arr{
        print(i)
    }
}

数据从 print(i) 语句打印到控制台,但是一旦我离开第一个 for 循环,它就会清空数组。谁能告诉我为什么,以及如何解决这个问题?

最佳答案

Firebase 代码是异步的。它正在附加它,但是当它把它附加到数组时,你的

for i in arr {
    print(i)
}

语句已经执行。从 Firebase 检索数据后,您应该从 observeSingleEvent 中回调一个函数来执行某些操作。

override func viewDidLoad() {
    super.viewDidLoad()
    var arr = [String]()
    DataService.instance.recievers.observeSingleEvent(of: .value) {(recipients: FIRDataSnapshot) in
        if let recievers = recipients.value as? [String]{
            for i in recievers{
                print(i)
                arr.append(i)
            }
            displayArray(arr)
        }
    }
}

func displayArray(name: [String]) {
    for i in arr{
        print(i)
    }
}

关于arrays - 元素未从 FireBase 附加到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42228293/

相关文章:

javascript - React.js Firebase 和 Firepad 组件

javascript - 如何在js中进行排序?

javascript - 使用javascript中的搜索字符串过滤嵌套的对象数组

swift - 来自 NSImage (Swift) 的像素信息

xcode - 使用#selector 而不是显式构造选择器

android - Android Release + Firebase + Google Tag Manager + Google Analytics 的 ecommerce_purchase 问题

javascript - 如果它是多维数组或对象或两者,如何从 Meteor 集合中获取元素?

java - 如何验证字符串是否包含列表中的任何字符串?

ios - 我如何从这个 Swift 类创建一个基类以便它可以被继承?

authentication - 没有为第二个选项卡触发 Firebase onauth