Arrays 如何将Firebase中的数据正确添加到阵列中?
我试图从Firebase获得结果并将其放入数组,但似乎我错过了一些东西。我想要的是从Firebase获取“时间”和“血糖”值,并将它们放入一个数组中,用于图表。我可以将数据放入“BG”和“Time”数组中,但当我将它们“附加”到“FetchedDate”和“FetchedBG”中时,我会看到空数组(FetchedBG和FetchedDate) Firebase异步加载(并同步)数据库中的数据。由于这可能需要一些时间,因此代码将继续执行,并在阵列仍然为空时打印阵列 一旦某个值可用(第一次或当数据更改时),就会调用块。它会将数据添加到数组中。但到那时,打印语句早已完成 解决方案是将值可用时(或值已更改时)需要运行的代码移动到块中Arrays 如何将Firebase中的数据正确添加到阵列中?,arrays,swift,firebase,firebase-realtime-database,Arrays,Swift,Firebase,Firebase Realtime Database,我试图从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:
参数:将开始同步的代码与响应值更新的代码隔离开来的原因。非常感谢!现在我可以将数据放入图表:)非常感谢!现在我可以将数据放入图表:)