You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI何时触发视图更新?修改State变量后为何未立刻刷新界面

SwiftUI 视图更新时机说明

为什么修改round后body没有立刻更新?

SwiftUI 对@State属性的变更采用批量合并更新策略:

  • 所有在同一个主线程同步代码块内的@State修改,都会被SwiftUI暂存,不会立刻触发body的重新计算
  • 只有当当前正在执行的同步函数(也就是你的flagTapped函数)完全执行完毕,回到主线程RunLoop的空闲阶段时,SwiftUI才会汇总所有发生变更的@State属性,一次性计算新的body,完成视图更新
  • 这种设计可以避免多次修改State导致的重复无意义渲染,大幅提升视图渲染效率

以你提供的代码为例,你在flagTapped函数中可能先后修改round、score、countries、correctAnswer、shouldShowWrongAnswer多个@State属性,这些变更会被合并为一次更新,只会触发一次body重绘,而不是每修改一个属性就更新一次。

额外注意

你的示例代码中还缺少shouldShowGameEnded的@State定义,直接运行会报未定义变量的错误,需要补充对应声明:

@State private var shouldShowGameEnded = false

内容的提问来源于stack exchange,提问作者Sotiris Kaniras

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 18:06:04