簡體   English   中英

退出“ while”循環后,數組項會被刪除嗎?

[英]Array items are deleted after exiting 'while' loop?

我有一個“ 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()語句,並且發現如果語句位於附加代碼的正下方,但在})之外,我可以獲取它以在附加數組時打印數組。它僅返回一個空數組。

這里發生了什么? 謝謝!

observeEventType方法有什么作用?

從將阻止/關閉作為參數的事實來看,它向我表明這是一個異步函數(該函數在后台線程上啟動長時間運行的任務,然后在后台任務完成之前立即返回。最后,則當長時間運行的任務完成時,它將調用完成阻止/關閉。)

比喻:

您是大學教授。 您將一堆考試交給助教,然后說:“請給這些課程打分,完成后將成績輸入計算機。”

如果當您的助手走到空盪盪的教室開始為考試評分時,您登錄了自己的並檢查了考試成績,是否可以輸入? 當然不是。 助手還沒有坐下!

“為這些考試打分”是一項長期的工作。 “並在完成后將它們輸入計算機”是完成框/結束框。

如果調用異步函數,則在下一行查找結果,它們將不存在。

您必須將在任務完成后立即運行的代碼放入完成塊/閉包中(Objective-C稱它們為閉包。Swift稱它們為閉包。其他語言稱它們為lambda或匿名函數。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM