将Firebase数据附加到Swift中的数组中

时间:2016-08-22 01:06:52

标签: arrays swift firebase firebase-realtime-database

我不知道自己做错了什么!我只是想从Firebase数据库获取数据并迭代每个结果并将它们放入一个数组中。我尝试了不同的方法。但它们都返回结果,一次向数组添加一个结果。导致数组看起来像这样:

let ref = FIRDatabase.database().reference().child("users")
ref.observeEventType(.ChildAdded, withBlock: { snapshot in
    userUrl = snapshot.value?["profile_image_1"] as! String
    imageArray.insert(userUrl, atIndex: 0)
}, withCancelBlock: { error in
    print(error.description)
}) 

正如您所看到的,每次迭代时都会添加一个对象。 这就是我所拥有的:

let userUrl = (snapshot.value.objectForKey("profile_image_1")) as! String
imageArray.append(userUrl)

我也试过这个:

["1","2","3","4"]

我只想将每个结果放入一个数组中,我可以在完成块之外一次访问数据。

> main
idspace   id  x  y move
    198 1238 33  4 stay
    641 1236 36 12 move
    1515 1237 30 28 move

> move
idspace   id x y move
      4 1236 4 1 move

任何帮助都会很棒!

数据库: Firebase Database Structure

2 个答案:

答案 0 :(得分:0)

尝试这样的事情:

var imageArray = []

func appendData(){
    let ref = FIRDatabase.database().reference().child("users") 

    ref.observeEventType(.Value, withBlock: { snapshot in
        var tempImageArray = []

        for user in snapshot.children {
            userUrl = user.value?["profile_image_1"] as? String
            self.imageArray.insert(userUrl, atIndex: 0)
            tempImageArray.append(broadcastItem)
        }

        self.imageArray = tempImageArray
    })
}

编辑:我更新了代码,请试试这个。

答案 1 :(得分:0)

这不直接回答问题,但我假设您想在追加所有内容后访问最终数据。

我遇到了同样的问题,我通过做同样的事情来实现它,然后我在完成块中创建了一个dispatchQueue。

let ref = FIRDatabase.database().reference().child("users")

ref.observeEventType(.ChildAdded, withBlock: { snapshot in
    userUrl = snapshot.value?["profile_image_1"] as! String
    imageArray.insert(userUrl, atIndex: 0)

 DispatchQueue.main.async(execute: {

 //access the final array here.

  }
}) 

我希望这会有所帮助。