簡體   English   中英

Firebase While Loop迅捷4

[英]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.

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