SwiftUI 与 iOS App
@State
由视图拥有的界面状态
免费阅读 · 配套小练习 · 更新于
一句话理解
让 AI 的计数和开关随操作更新界面,并弄清状态属于谁。
打个比方
界面旁有一块小记事板,记录当前计数。按钮改动记事板,显示内容随之更新;它并不是一份长期保存的档案。
@State 让 SwiftUI 管理视图层级中的一份状态。本例由 ContentView 拥有计数,按钮修改它,Text 读取它。SwiftUI 会在相关状态变化时更新界面。状态存储与视图身份和生命周期有关,不能把它当成持久化数据库。
看个例子
import SwiftUI
struct ContentView: View {
@State private var completed = 0
var body: some View {
VStack(spacing: 16) {
Text("已完成 \(completed) 个概念")
Button("完成一个") {
completed += 1
}
}
.padding()
}
}状态定义、显示和修改都围绕 completed。练习约定是当前界面的临时计数,没有保存到磁盘;仅把 App 切到后台,也不能当成状态一定已重新创建的证据。
什么时候会遇到
- 让 AI 实现临时计数或开关,明确初始值与更新规则。
- 检查 AI 是否为同一个值建立了两份互相不同步的状态。
常见误解
@State 更新界面不等于跨启动保存数据。需要持久化时应单独定义保存要求。
Vibe Coding 小练习 · 描述需求 → 看懂改动 → 验证结果
动手练一练:让 AI 写临时计数,核对状态拥有者
在自己的 SwiftUI 练习工程中操作,或先审阅本页计数示例。
试着这样告诉 AI
请在 ContentView 中增加临时学习计数:初始为 0,点击“完成一个”后加 1,并显示“已完成 N 个概念”。由这块视图拥有状态,不做磁盘或云端保存,保留其他界面。完成后指出状态定义、读取和修改位置,并说明如何验证。可以在你使用的 AI 编程工具中完成;也可以先对照本页代码示例,练习理解需求、识别改动和列出检查项。
跟着做
- 把初始值、更新规则与保存边界交给 AI。
- 沿着 @State、Text 和 Button 核对同一份 completed,检查有没有重复状态。
- 实际运行时连续点击两次,检查 0、1、2 的变化;结合状态生命周期说明保存边界。
你应该看到
理解临时计数如何驱动显示,并能核对连续点击结果。
完成检查
- 每次操作只加一,显示读取同一份状态。
- 没有把 @State 或后台恢复声称为长期保存。
遇到卡点?看提示
把 App 切到后台并不一定重建视图。需要长期保存时,应另行提出明确需求。
查看参考思路
@State 由视图拥有,按钮更新状态,文字读取它。检查应包括初始值和连续操作;它没有写入磁盘,状态是否重建取决于视图身份与运行过程。
想一想
离开一块视图再回来,状态一定保留吗?
查看答案
不能只凭“离开再回来”判断,要看视图的身份与生命周期是否保留。若需要可靠的长期保存,应采用明确的持久化方案。