我有一个'while'循环,用于检查Firebase菜单上的某些价格。对于每个项目,它会转到特定的引用URL并获取该盘子的价格,然后将其值提交给要在桌面上显示的数组。
var i = 0
while i < self.itemNames.count {
itemNameRef.childByAppendingPath("\(self.itemNames[i])/itemPrice").observeEventType(.Value, withBlock: {
snapshot in
self.itemPrices.append(snapshot.value as! String)
})
i++
}
事情是,它似乎在退出observeEventType机箱后清除整个阵列。我已经在整个循环中放置了一些print()语句,并发现如果语句直接位于附加代码之下,我可以在它附加时打印数组,但在})之外,它只返回一个空数组。
这里发生了什么?谢谢!
答案 0 :(得分:4)
observeEventType
方法有什么作用?
从它将块/闭包作为参数的事实来看,它向我建议它是一个异步函数(一个函数在后台线程上启动长时间运行的任务,然后在后台任务之前立即返回最后,它在长时间运行的任务完成时调用完成块/闭包。)
你是大学教授。你把一摞考试交给你的助教并说'#34;请对这些考试进行评分,并在你完成后将成绩输入电脑。&#34;
如果您的助理走向空旷的教室开始评分考试,您可以登录并查看考试成绩,是否会输入?当然不是。助手还没有坐下来!
对这些考试进行评分&#34;是一项长期任务。 &#34;并在完成后将其输入计算机&#34;是完成块/关闭。
如果你打电话给异步功能,那么在下一行,查找结果,他们不会在那里。
你必须在完成块/闭包内完成任务完成后运行的代码(Objective-C称它们为块.Swift称它们为闭包。其他语言称它们为lambdas或匿名函数。)