gpt4 book ai didi

ios - Swift:未设置整数值。

转载 作者:行者123 更新时间:2023-11-30 12:46:36 25 4
gpt4 key购买 nike

在我的 ViewController 类的顶部,我有这个变量:

var allInCategory: Int = 0

然后在 ViewDidLoad 中我调用了一个函数并打印了变量:

getRandomQuestion()
print(allInCategory)

在该函数中我有一个 Firebase 调用:

 let queryRef2 = FIRDatabase.database().reference().child("Questions").child(cat)
queryRef2.observeSingleEvent(of: .value, with: { snapshot in

self.allInCategory = Int(snapshot.childrenCount)


})

我在更改变量时似乎遇到了一些问题。在控制台中输出:

0

如果我将 print 变量放入函数中,如下所示:

let queryRef2 = FIRDatabase.database().reference().child("Questions").child(cat)
queryRef2.observeSingleEvent(of: .value, with: { snapshot in

self.allInCategory = Int(snapshot.childrenCount)
print(self.allInCategory)

})

控制台的输出是:

0

30

我想这可能是由于从 firebase 获取该请求所需的时间所致。所以我将它包装在一个调度组中,如下所示:

ViewDidLoad:

getRandomQuestion()

group.notify(queue: DispatchQueue.main, execute: {
print("left group")
print(self.allInCategory)
})

在函数中:

group.enter()

let queryRef2 = FIRDatabase.database().reference().child("Questions").child(cat)
queryRef2.observeSingleEvent(of: .value, with: { snapshot in

self.allInCategory = Int(snapshot.childrenCount)


})

group.leave()

但是现在控制台输出如下:

left group

0

谁能帮我解决这个问题吗?我希望这不是我所错过的完全菜鸟的东西。

最佳答案

您需要将group.leave()放入完成 block 内。这是处理异步调用的正确方法。

group.enter()

let queryRef2 = FIRDatabase.database().reference().child("Questions").child(cat)
queryRef2.observeSingleEvent(of: .value, with: { snapshot in
self.allInCategory = Int(snapshot.childrenCount)

group.leave()
})

关于ios - Swift:未设置整数值。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41560496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com