第40章 SwiftUI 的心智模型:视图是值,状态是源头
视图是值、状态是源头:理解 body 重算、some View、身份与场景,为后面七章打好地基
3 分钟阅读
第六篇里的第 37 章让你先摸了一次 SwiftUI 的手感。这一篇把那只手完整地装回来:八章,从"视图到底是什么"一直走到"一个能上架的界面长什么样"。
SwiftUI 最迷人也最容易劝退的一点是:它看起来太简单。Text("你好") 就出字,VStack { } 就排版,新手半小时能做出能跑的界面,然后在一个"列表点了不刷新"的 bug 上卡三天。原因通常不在 API,而在心智模型——SwiftUI 不是"在屏幕上摆控件",而是"用状态描述界面的样子,剩下的交给框架"。
这一篇的顺序是按"必须先想清楚的问题"排的:
@ViewBuilder 那一小节(第 15B.18 节)。xcrun --sdk macosx swiftc。body 每次都重新计算却不必担心性能。@Observable 模型里。NavigationStack、List、sheet 组装多页面应用,而不是把所有逻辑塞进一个 body。withAnimation、transition 把状态变化讲成一个用户看得懂的故事。#Preview 和测试把界面代码也纳入质量流程。视图是值、状态是源头:理解 body 重算、some View、身份与场景,为后面七章打好地基
@State、@Binding、@Observable、@Environment 的分工:一份状态该放在哪一层,数据为什么必须单向流动
SwiftUI 布局的三条规则、Stack 与 Grid、frame 的四层含义、自定义 Layout 与 ViewModifier
List 与身份、选择删除移动、NavigationStack 路由、sheet 与 alert、TabView 多标签
Form 自动排版、TextField 的三种取值方式、各种输入控件、焦点管理与表单校验该放在哪
withAnimation 与 .animation 的区别、可动画属性、transition、matchedGeometryEffect、phaseAnimator
task 修饰符的生命周期、三态建模、async let 并发、URLSession 请求、取消与去抖
#Preview 的实用写法、SwiftUI 代码怎么测、可访问性清单,以及上架前该过一遍的检查项