元素未附加到FireBase

时间:2017-02-14 14:07:46

标签: 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循环,它就会清空数组。任何人都可以告诉我为什么,以及如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

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)
    }
}