名称: swiftui-ui-patterns
描述: 构建 SwiftUI 视图与组件的最佳实践与示例驱动指南。适用于创建或重构 SwiftUI UI、使用 TabView 设计标签页架构、组合屏幕,或需要特定组件模式与示例的场景。
根据你的目标选择路径:
rg "TabView\(" 或类似命令查找相近示例,然后阅读最接近的 SwiftUI 视图。references/components-index.md 中选择相关的组件参考并遵循其指导。references/app-scaffolding-wiring.md 开始,以连接 TabView + NavigationStack + 模态视图。AppTab 和 RouterPath。@State、@Binding、@Observable、@Environment),避免不必要的视图模型。.task 使用 async/await,并显式处理加载/错误状态。.sheet(item:) 而非 .sheet(isPresented:)。避免在模态视图主体内使用 if let。模态视图应拥有其操作,并在内部调用 dismiss(),而不是转发 onCancel/onConfirm 闭包。@Environment 注入的依赖项。.task 和显式的状态枚举来实现异步加载。以 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 ? "保存中…" : "保存") {
Task { await save() }
}
}
}
private func save() async {
isSaving = true
await store.save(item)
dismiss()
}
}
references/<组件名>.md。references/components-index.md 中更新新条目。