我在firebase中有三个节点,我想通过使用相同的循环来循环。我能够成功地遍历单个节点使用此代码(饼干):如何在同一个循环中一次循环所有Firebase子项?
databaseRef.child("cookies").observeSingleEvent(of: .value, with: {(snapshot) in
for item in snapshot.children.allObjects as! [DataSnapshot] {
let thisItem = item.value as! NSDictionary
if(favoriteArray.contains(item.key)) {
self.numberOfRecipes.append(thisItem["recipeHeaderFirebase"] as! String)
let tempRecipe = Recipe()
tempRecipe.fbKey = item.key
tempRecipe.recipeHeaderObject = (thisItem["recipeHeaderFirebase"] as! String)
tempRecipe.recipeTextObject = (thisItem["recipeIngredientsTextFirebase"] as! String)
tempRecipe.recipeImageObject = (thisItem["recipeImageFirebase"] as! String)
self.recipeClassArray.append(tempRecipe)
}
}
})
我现在想循环剩下的两个节点为好。有任何想法吗?
我试着添加额外的节点,但控制台中的打印显示它只从最后一个节点添加。请参阅以下代码:
self.databaseRef.child("cookies").observeSingleEvent(of: .value, with: {(snapshot) in
self.databaseRef.child("dessert").observeSingleEvent(of: .value, with: {(snapshot) in self.databaseRef.child("breakfast").observeSingleEvent(of: .value, with: {(snapshot) in
for item in snapshot.children.allObjects as! [DataSnapshot] {
let thisItem = item.value as! NSDictionary
if(favoriteArray.contains(item.key)) {
self.numberOfRecipes.append(thisItem["recipeHeaderFirebase"] as! String)
let tempRecipe = Recipe()
tempRecipe.fbKey = item.key
tempRecipe.recipeHeaderObject = (thisItem["recipeHeaderFirebase"] as! String)
tempRecipe.recipeTextObject = (thisItem["recipeIngredientsTextFirebase"] as! String)
tempRecipe.recipeImageObject = (thisItem["recipeImageFirebase"] as! String)
self.recipeClassArray.append(tempRecipe)
}
}
print(self.numberOfRecipes.count)
print(self.recipeClassArray)
let url = URL(string: self.recipeClassArray[self.currentView].recipeImageObject)
self.recipeImageUI.kf.setImage(with: url) //SÄTTER IN BILD MED KINGFISHER
self.recipeHeader.text = self.recipeClassArray[self.currentView].recipeHeaderObject //SÄTTER IN HEADER
self.ingredientText.text = self.recipeClassArray[self.currentView].recipeTextObject //SÄTTER IN TEXTEN
self.animateFunc(image: self.recipeImageUI, labelHeader: self.recipeHeader, labelText: self.ingredientText) //FUNKTION FÖR ATT ANIMERA
})
})
})
您可以嵌入在观察到对方。例如,类似这样的东西:databaseRef.child(“cookies”)。observeSingleEvent(of:.value,with:{(snapshot)in databaseRef.child(“secondNode”)。observeSingleEvent(of:.value,with:{快照)in ...等等。这在技术上不是一个循环,而是数据访问一个接一个地发生 –
谢谢,但我在控制台中做了一个打印,它似乎只是从最后一个节点添加,忽略了前两个列出...更新我的帖子上面:)你能看到缺少的东西吗? –
是的,因为打印只能在最深层次上调用...所以尝试这样的事情:self.databaseRef.child(“cookies”)。observeSingleEvent(的:.value的,具有:{(cookiesSnapshot)在 \t \t打印( “曲奇:\(cookiesSnapshot)”) \t \t self.databaseRef.child( “甜点”)observeSingleEvent(的:。价值,具有:{ (dessertSn apshot)在 \t \t \t打印( “甜点:\(dessertSnapshot)”) \t \t \t self.databaseRef.child( “早餐”)observeSingleEvent(作者:.value的,有:{(breakfastSnapshot)在 \t \t \t print(“早餐:\(早餐快照)”) –