值没有出现在我的其余代码中

时间:2017-06-07 14:25:38

标签: ios swift for-loop firebase firebase-realtime-database

我正在使用这个填充我的“filteredLocations”数组:

    let sampleRef = FIRDatabase.database().reference().child("SamplePost").child("post")

    sampleRef.observeSingleEvent(of:.value, with: {(snapshot) in
        if  let result = snapshot.children.allObjects as? [FIRDataSnapshot] {
            for child in result{
                let dictionary = child.value as? [String: AnyObject]
                let lat = dictionary?["lat"] as! Double
                let long = dictionary?["long"] as! Double
                let structure = MapPoints(Latitude: lat, Longitude: long)
                self.filteredLocations.append(structure)
                print("This is the amount in here \(self.filteredLocations.count)")

            }
        }
    })

我的快照中的print语句返回2,但是当我在其他地方打印filteredLocations.count时它返回0.我在viewdidload的开头有Firebase代码

1 个答案:

答案 0 :(得分:2)

您的问题是“sampleRef.observeSingleEvent”是异步的。这意味着它是在后台线程中运行,等待数据,同时应用程序继续执行主线程上的viewWillAppear等函数。

当您从服务器获取数据时,在使用数据填充数组之前,已经执行了其他打印计数方法。

为了更好地理解这一点。将UIButton放在控制器上并将其绑定到打印阵列计数的函数。然后启动应用程序并按下按钮。它应该打印2,因为按下按钮时应该从服务器获取数据。