MiniCode

@State

由视图拥有的界面状态

免费阅读 · 配套小练习 · 更新于

一句话理解

让 AI 的计数和开关随操作更新界面,并弄清状态属于谁。

打个比方

界面旁有一块小记事板,记录当前计数。按钮改动记事板,显示内容随之更新;它并不是一份长期保存的档案。

@State 让 SwiftUI 管理视图层级中的一份状态。本例由 ContentView 拥有计数,按钮修改它,Text 读取它。SwiftUI 会在相关状态变化时更新界面。状态存储与视图身份和生命周期有关,不能把它当成持久化数据库。

看个例子

SwiftUI · 对照 AI 实现的本地计数
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 编程工具中完成;也可以先对照本页代码示例,练习理解需求、识别改动和列出检查项。

跟着做

  1. 把初始值、更新规则与保存边界交给 AI。
  2. 沿着 @State、Text 和 Button 核对同一份 completed,检查有没有重复状态。
  3. 实际运行时连续点击两次,检查 0、1、2 的变化;结合状态生命周期说明保存边界。

你应该看到

理解临时计数如何驱动显示,并能核对连续点击结果。

完成检查

  • 每次操作只加一,显示读取同一份状态。
  • 没有把 @State 或后台恢复声称为长期保存。
遇到卡点?看提示

把 App 切到后台并不一定重建视图。需要长期保存时,应另行提出明确需求。

查看参考思路

@State 由视图拥有,按钮更新状态,文字读取它。检查应包括初始值和连续操作;它没有写入磁盘,状态是否重建取决于视图身份与运行过程。

想一想

离开一块视图再回来,状态一定保留吗?

查看答案

不能只凭“离开再回来”判断,要看视图的身份与生命周期是否保留。若需要可靠的长期保存,应采用明确的持久化方案。

继续查阅官方资料

Apple · State本文为面向新手的概念解释,具体工具行为以对应文档为准。