SKILL

swiftui-patterns

SwiftUI 架构模式,使用 @Observable 进行状态管理,视图组合,导航,性能优化,以及现代 iOS/macOS UI 最佳实践。

适用对象:移动应用开发。自动收录 · 待核查。

原作者说明节选

从固定版本的 SKILL.md 提取,保留原文语言。以下内容属于作者说明,本站尚未验证安装、兼容或运行结果。

查看中文原文

原文涵盖的主题

  • SwiftUI 模式
  • 何时激活
  • 状态管理
  • 属性包装器选择
  • @Observable ViewModel
  • 消费 ViewModel 的视图
  • 环境注入
  • 视图组合

适用于 Apple 平台的现代 SwiftUI 模式,用于构建声明式、高性能的用户界面。涵盖 Observation 框架、视图组合、类型安全导航和性能优化。 构建 SwiftUI 视图和管理状态时(@State、@Observable、@Binding) 使用 NavigationStack 设计导航流程时 构建视图模型和数据流时 优化列表和复杂布局的渲染性能时 在 SwiftUI 中使用环境值和依赖注入时 选择最适合的最简单包装器: | 包装器 | 使用场景 | |---------|----------| | @State | 视图本地的值类型(开关、表单字段、Sheet 展示) | | @Binding | 指向父视图 @State 的双向引用 | | @Observable 类 + @State | 拥有多个属性的自有模型 | | @Observable 类(无包装器) | 从父视图传递的只读引用 | | @Bindable | 指向 @Observable 属性的双向绑定 | | @Environment | 通过 .environment() 注入的共享依赖项 | 使用 @Observable(而非 ObservableObject)—— 它跟踪属性级别的变更,因此 SwiftUI 只会重新渲染读取了已变更属性的视图: 用 @Environment 替换 @EnvironmentObject: 将视图拆分为小型、专注的结构体。当状态变更时,只有读取该状态的子视图会重新渲染: 使用 NavigationStack 与 NavigationPath 来实现程序化、类型安全的路由: LazyVStack 和 LazyHStack 仅在视图可见时才创建它们: 在 ForEach 中始终使用稳定、唯一的 ID —— 避免使用数组索引: 切勿在 body 内执行 I/O、网络调用或繁重计算 使用 .task {} 处理异步工作 —— 当视图消失时它会自动取消 在滚动视图中谨慎使用 .sensoryFeedback() 和 .geometryGroup() 在列表中最小化使用 .shadow()、.blur() 和 .mask() —— 它们会触发屏幕外渲染 对于 body 计算昂贵的视图,遵循 Equatable 以跳过不必要的重新渲染: 使用 #Preview 宏配合内联模拟数据以进行快速迭代: 在新代码中使用 ObservableObject / @Published / @StateObject / @EnvironmentObject —— 迁移到 @Observable 将异步工作直接放在 body 或 init 中 —— 使用 .task {} 或显式的加载方法 在不拥有数据的子视图中将视图模型创建为 @State —— 改为从父视图传递 使用

这里只展示节选,请以完整原文和当前要求为准。

来源仓库
affaan-m/ECC
源文件
docs/zh-CN/skills/swiftui-patterns/SKILL.md
固定版本
d2ef2680594f9a17526a6e1a2e18b3d242c5d17b
阅读完整原作者说明 ↗

来源与内容状态

本条为自动发现的元数据,尚未完成人工文档核查;适用性与运行结果待核查。

原作者:affaan-m/ECC · 原作者仓库元数据。文档核查:未核查。最近来源检查:2026-11-09T15:01:42.663Z。

分类由名称、说明与路径规则生成,分类不代表已核实适配。

许可与权利归属

MIT。第三方内容及版权归原作者,使用条件以原文为准。

许可原文 ↗

本站没有因同步、复制或用户自报成功而将资源标为运行验证通过。

限制与注意事项

  • 元数据收录不代表本站已经安装、适配、实测或进行安全审查。