Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何将Firebase中的数据正确添加到阵列中?_Arrays_Swift_Firebase_Firebase Realtime Database - Fatal编程技术网

Arrays 如何将Firebase中的数据正确添加到阵列中?

Arrays 如何将Firebase中的数据正确添加到阵列中?,arrays,swift,firebase,firebase-realtime-database,Arrays,Swift,Firebase,Firebase Realtime Database,我试图从Firebase获得结果并将其放入数组,但似乎我错过了一些东西。我想要的是从Firebase获取“时间”和“血糖”值,并将它们放入一个数组中,用于图表。我可以将数据放入“BG”和“Time”数组中,但当我将它们“附加”到“FetchedDate”和“FetchedBG”中时,我会看到空数组(FetchedBG和FetchedDate) Firebase异步加载(并同步)数据库中的数据。由于这可能需要一些时间,因此代码将继续执行,并在阵列仍然为空时打印阵列 一旦某个值可用(第一次或当数据更

我试图从Firebase获得结果并将其放入数组,但似乎我错过了一些东西。我想要的是从Firebase获取“时间”和“血糖”值,并将它们放入一个数组中,用于图表。我可以将数据放入“BG”和“Time”数组中,但当我将它们“附加”到“FetchedDate”和“FetchedBG”中时,我会看到空数组(FetchedBG和FetchedDate)

Firebase异步加载(并同步)数据库中的数据。由于这可能需要一些时间,因此代码将继续执行,并在阵列仍然为空时打印阵列

一旦某个值可用(第一次或当数据更改时),就会调用块。它会将数据添加到数组中。但到那时,打印语句早已完成

解决方案是将值可用时(或值已更改时)需要运行的代码移动到块中

var FetchedDate:[String]! = []
var FetchedBG: [Double]! = []

//GET DATA FROM FB 
func StartSynchronizingDetails(){
    let posts = rootRef.child("Diary/\(userID!)/\(passedDATE!)")
    //let posts = rootRef.queryOrderedByChild(passedDATE!)
    posts.observeEventType(FIRDataEventType.Value , withBlock: { (snapshot) in

        for list in snapshot.children {
            if  let BG = list.value.objectForKey("Blood Glucose")!.doubleValue {
            self.FetchedBG.append(BG)
                print(BG) // SHOWS RESULTS AS EXPECTED
            }
            if let TIME = list.value.objectForKey("Time") {
            self.FetchedDate.append(TIME as! String)
                  print(TIME) // SHOWS RESULTS AS EXPECTED
            }
        }
        print(FetchedDate)
        print(FetchedBG)
    })  { (error) in
        print(error.localizedDescription)
    }
}

override func viewDidLoad() {
    super.viewDidLoad()

    StartSynchronizingDetails()
当你的应用程序与网络资源交互(可能耗时)时,这是一种非常常见的模式。这也是Firebase的
observeEventType
采用
withBlock:
参数的原因:将开始同步的代码与响应值更新的代码隔离开来。

Firebase加载(并同步)数据库中的数据。由于这可能需要一些时间,因此代码将继续执行,并在数组仍然为空时打印数组

一旦某个值可用(第一次或当数据更改时),就会调用块。它会将数据添加到数组中。但到那时,打印语句早已完成

解决方案是将值可用时(或值已更改时)需要运行的代码移动到块中

var FetchedDate:[String]! = []
var FetchedBG: [Double]! = []

//GET DATA FROM FB 
func StartSynchronizingDetails(){
    let posts = rootRef.child("Diary/\(userID!)/\(passedDATE!)")
    //let posts = rootRef.queryOrderedByChild(passedDATE!)
    posts.observeEventType(FIRDataEventType.Value , withBlock: { (snapshot) in

        for list in snapshot.children {
            if  let BG = list.value.objectForKey("Blood Glucose")!.doubleValue {
            self.FetchedBG.append(BG)
                print(BG) // SHOWS RESULTS AS EXPECTED
            }
            if let TIME = list.value.objectForKey("Time") {
            self.FetchedDate.append(TIME as! String)
                  print(TIME) // SHOWS RESULTS AS EXPECTED
            }
        }
        print(FetchedDate)
        print(FetchedBG)
    })  { (error) in
        print(error.localizedDescription)
    }
}

override func viewDidLoad() {
    super.viewDidLoad()

    StartSynchronizingDetails()

当您的应用程序与交互时,这是一种非常常见的模式(可能很耗时)网络资源。这也是Firebase的
observeEventType
使用
withBlock:
参数:将开始同步的代码与响应值更新的代码隔离开来的原因。

非常感谢!现在我可以将数据放入图表:)非常感谢!现在我可以将数据放入图表:)