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

标签 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)")

            }
        }
    })

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

最佳答案

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

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

为了更好地理解这一点。在 Controller 上放置一个 UIButton 并将其绑定(bind)到打印数组计数的函数。然后启动应用程序并按下按钮。它应该打印 2,因为当您按下按钮时,您应该已经从服务器取回了数据。

关于ios - 值没有出现在我的其余代码中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44415419/

相关文章:

ios - 在 iOS 上调试 Cordova (PhoneGap) 代码

ios - 如何在我的 iOS 应用程序中播放广播? Swift 和 AVFoundation

swift - 如何在 UIImagePickerController MediaType 上使用 switch 语句?

javascript - 我可以使用串联的 var+array_value 作为 jquery 中的选择器,即 $ ("#var+array_value")

iphone - 模糊图像的特定部分(矩形,圆形)?

iphone - 我必须支持越狱的 iPhone 吗?

php - While循环使用变量2次

scala - 没有序列的scala中的for循环?

ios - 如何让 uitableview 填满我所有的 View ?

ios - Swift ios 检查哪个 View Controller 存在