gpt4 book ai didi

Swift - 如果值发生变化如何获取下一个数据

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

我正在尝试在用户播放完上一个问题后从服务器获取下一个问题。当 arrayNum 改变时,无法获取下一个问题。我正在考虑使用 switch 方法一遍又一遍地编写相同的代码。有更好的办法吗?

func retriveRoom(){
let idRef = db.collection("ROOMS_Collection").document(GameData.shared.documentID)
idRef.getDocument { (docSnapshot, error) in
guard let docSnapshot = docSnapshot, docSnapshot.exists else {return}
guard let data = docSnapshot.data() else { return }

let questionID = data["questionID"] as? Array<Int>


let questionRef = self.db.collection("QUESTIONS_Collection").document("\(questionID![self.arrayNum])")

questionRef.getDocument{ (docSnapshot, error) in
guard let docSnapshot = docSnapshot, docSnapshot.exists else { return }
let data = docSnapshot.data()
self.questionArray = (docSnapshot.data()?.compactMap({_ in Question(dictionary: data!)}))!
let question = self.questionArray[0]

self.answer = Int(question.answer)!

self.questionText.fontColor = UIColor.white
self.questionText.fontName = "Verdana"
self.questionText.text = ("\(question.question)")
self.questionText.fontSize = 24.0
self.questionText.numberOfLines = 0
self.questionText.lineBreakMode = NSLineBreakMode.byWordWrapping
self.questionText.zPosition = 5
self.questionText.position = CGPoint(x: (self.questionBackground?.frame.midX)! - 5, y: (self.questionBackground?.frame.midY)! - 5)
self.questionText.preferredMaxLayoutWidth = (self.questionBackground?.frame.width)! - 10

self.addChild(self.questionText)

}
}
}

最佳答案

如果我理解您正在尝试正确执行的操作,那么您希望在 arrayNum 更改时从数据库中获取另一个问题。我认为最好的选择是在 arrayNum 变量上尝试属性观察器函数。像这样的事情:

在类声明中声明 arrayNum:

var arrayNum : Int {
didSet {
// Implement retrieveRoom() here
retrieveRoom()
}
}

您的代码中不清楚的是 arrayNum 何时以及如何更改。作为 didSet 的替代方案,您还可以使用 willSet,顾名思义,它在即将重新分配参数值时调用。您可以在这里阅读:

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html

(顺便说一句,如果您一次获取一批问题,而不是每次需要新问题时重复数据库调用,它可能会更好地为您的用户体验提供更好的服务。但这与您的问题并不严格相关。问题。)

希望有帮助。

关于Swift - 如果值发生变化如何获取下一个数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49953370/

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