我正在使用这个填充我的“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代码
答案 0 :(得分:2)
您的问题是“sampleRef.observeSingleEvent”是异步的。这意味着它是在后台线程中运行,等待数据,同时应用程序继续执行主线程上的viewWillAppear等函数。
当您从服务器获取数据时,在使用数据填充数组之前,已经执行了其他打印计数方法。
为了更好地理解这一点。将UIButton放在控制器上并将其绑定到打印阵列计数的函数。然后启动应用程序并按下按钮。它应该打印2,因为按下按钮时应该从服务器获取数据。