swift - 使用 SwiftUI 显示视图后,如何在设定的时间后更改变量?
问题描述
我有一个游戏的三种状态:开始,玩,结束。我想在游戏处于“开始”模式时显示一个视图,几秒钟后将游戏状态更改为“正在播放”并因此更改显示的视图。
这是我到目前为止所拥有的:
var body: some View {
ZStack{
Color(red: 0.96, green: 0.96, blue: 0.96).edgesIgnoringSafeArea(.all)
if(skateGame.getState() == .start){
Text("Start is active").onAppear(perform: {
skateGame.startGame()
})
}else if(skateGame.getState() == .end){
Text("done")
}
}
}
这是skateGame类的一些代码:
enum StateOfGame{
case start
case player1Set
case player2Set
case player1Try
case player2Try
case end
}
class SkateGamePlayLocal{
private let player1 : Player
private let player2 : Player
private var stateOfGame : StateOfGame = .start
init(player1: Player, player2: Player){
self.player1 = player1
self.player2 = player2
}
func startGame(){
self.stateOfGame = .end
}
func getState() -> StateOfGame{
return self.stateOfGame
}
}
我将如何进行这项工作?
解决方案
问题是示例代码缺少两个计时器任何视图“状态”,计时器可能会更新以触发更新 UI,这两者对于使其工作都是必不可少的。
对于一个与所询问的内容类似的简单示例,请查看 HwS 的“如何在 SwiftUI 中使用计时器”。
将计时器移出视图并移入SkateGamePlayLocal
或类似的东西需要了解ObservableObject
、@Published
和@ObservedObject
的作用@StateObject
。再次值得一看 HwS 在这方面的资源,例如“与 @ObservedObject 共享 SwiftUI 状态”
祝你好运。
推荐阅读
- python - 镜像没有通过 8000 端口访问(正在开发中)
- python - CSRF 验证失败。请求中止。我保留了 ta 标签 {% csrf_token %} 仍然得到这个
- javascript - 破坏细节网格时,Ag-grid Master 细节崩溃失败
- python - 如何使 threading.local() 与非 Python 线程一起工作?
- html - 无法从可折叠内容中删除斜体文本
- regex - 正则表达式:如何从此字符串中获取“按位”值之后的“宽度”和“高度”值?
- python-3.x - 计算python列表中具有相同元素值的对数
- kotlin - 使用 withContext 的协程执行顺序
- javascript - Jest 无法导入 TypeScript 文件
- javascript - 返回重复数字的数组