Swiftui Ui Patterns技能使用说明
2026-03-29
新闻来源:网淘吧
围观:11
电脑广告
手机广告
SwiftUI 界面模式
快速开始
根据你的目标选择一条路径:
现有项目
- 确定功能或屏幕以及主要的交互模型(列表、详情、编辑器、设置、标签页)。
- 在代码仓库中通过
rg "TabView\("或类似的搜索,找到相近的示例,然后阅读最接近的 SwiftUI 视图。 - 应用本地约定:优先使用 SwiftUI 原生状态管理,尽可能保持状态局部化,并使用环境注入来处理共享依赖。
- 从
references/components-index.md中选择相关的组件参考,并遵循其指导。 - 使用小而专注的子视图和 SwiftUI 原生数据流来构建视图。
新项目脚手架
- 从
references/app-scaffolding-wiring.md开始,以连接 TabView + NavigationStack + 表单。 - 添加一个最小化的
AppTab和路由器路径基于提供的框架。 - 首先根据您需要的UI选择下一个组件参考(TabView、NavigationStack、Sheets)。
- 随着新屏幕的添加,扩展路由和sheet枚举。
遵循的一般规则
- 使用现代SwiftUI状态(
@State、@Binding、@Observable、@Environment),并避免不必要的视图模型。 - 优先采用组合方式;保持视图小巧且专注。
- 使用async/await配合
.task以及显式的加载/错误状态。 - 仅在编辑遗留文件时维持现有的遗留模式。
- 遵循项目的格式化器和风格指南。
- Sheets:优先
.sheet(item:)当状态表示一个选中的模型时使用。避免在sheet主体内部使用if let。Sheet应拥有自己的操作,并在内部调用dismiss(),而不是通过传递onCancel/onConfirm闭包来实现。创建新SwiftUI视图的工作流程
定义视图的状态及其所有权位置。
- 识别通过
- @Environment
注入的依赖项。绘制视图层次结构,并将重复部分提取为子视图。 - 使用
- .task
实现异步加载,并在需要时使用明确的状态枚举。当UI具有交互性时,添加无障碍标签或标识符。 - Add accessibility labels or identifiers when the UI is interactive.
- 通过构建进行验证,并在必要时更新使用站点。
组件参考
使用references/components-index.md作为入口点。每个组件参考应包含:
- 意图和最佳适用场景。
- 遵循本地惯例的最小使用模式。
- 注意事项和性能说明。
- 当前仓库中现有示例的路径。
表单模式
项目驱动表单(首选)
@State private var selectedItem: Item?
.sheet(item: $selectedItem) { item in
EditItemSheet(item: item)
}
表单拥有其操作
struct EditItemSheet: View {
@Environment(\.dismiss) private var dismiss
@Environment(Store.self) private var store
let item: Item
@State private var isSaving = false
var body: some View {
VStack {
Button(isSaving ? "Saving…" : "Save") {
Task { await save() }
}
}
}
private func save() async {
isSaving = true
await store.save(item)
dismiss()
}
}
添加新的组件参考
- 创建
references/<组件>.md。 - 保持简短且可操作;链接到当前仓库中的具体文件。
- 更新
references/components-index.md以包含新条目。
文章底部电脑广告
手机广告位-内容正文底部


微信扫一扫,打赏作者吧~