[英]Firebase While Loop Swift 4
我正在其中一個應用程序中創建一個新頁面,並且遇到了一個涉及Firebase和While循環的小問題。 下面是我的代碼:
var user = User()
var i = 0
while i < 101 {
print("Print Statement 1: " + String(i))
//Correctly prints i, incrementing it by 1 every time like it should.
self.ref.child("Directory")
.child(String(i))
.observeSingleEvent(of: .value, with: { (snapshot) in
print("Print Statement 2: " + String(i))
//Always prints 101
let nameValue = snapshot.value as? NSDictionary
if nameValue != nil {
user.id = String(i)
//Always get set to 101, and not the current value of i
}
}) { (error) in
print(error.localizedDescription)
}
i += 1
}
日志:
打印聲明1:
0
1
2
3
4
etc.
打印聲明2:
101
101
101
101
101
etc.
我在這里唯一的問題是為什么第二個打印語句總是打印101,而不是i的增量值。 這與Firebase Observer不會在每次執行while循環時都觀察單個事件有關嗎? 另外,我該怎么做才能解決此問題?
謝謝,KPS
這是因為firebase異步查詢您的請求,而完成處理程序(您在其中打印i
)則恰好在while循環結束且i
的值為101時被調用。
編輯:一種解決方法是擁有一個單獨的計數器,僅在檢查值時才遞增。 因此,只有當結果輸入並且您可以知道哪個結果為零時,這種情況才會改變。 但是,這並不可靠,因為網絡請求可能很慢且無序,但在大多數情況下應該可以正常工作
var user = User()
var i = 0
var counter = 0
while i < 101 {
...
self.ref.child("Directory")
.child(String(i))
.observeSingleEvent(of: .value, with: { (snapshot) in
...
let nameValue = snapshot.value as? NSDictionary
if nameValue != nil {
user.id = String(i)
// prints the item number
print(counter)
}
// increment the counter when you actually have data
counter += 1
}) { (error) in
print(error.localizedDescription)
}
i += 1
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.