SuperAPI AI 工具集

swiftui-ui-patterns

通用与其它

查看项目

更新于 10-15 21:41

技能介绍

用途:为构建 SwiftUI 视图与组件提供最佳实践和示例驱动指导,覆盖导航层级、自定义视图修饰符与响应式布局。

主要能力:按目标提供两条上手路径。已有项目:定位功能或屏幕及其主要交互模型(列表、详情、编辑器、设置、标签页),用 rg "TabView(" 等命令在仓库中查找相近示例并阅读最接近的 SwiftUI 视图,遵循本地约定(优先 SwiftUI 原生状态、状态尽量局部化、共享依赖用环境注入),从 references/components-index.md 选择组件参考。新项目脚手架:先读 references/app-wiring.md 连接 TabView + NavigationStack + sheets,再基于骨架添加最小 AppTab 与 RouterPath,随新屏幕扩展路由与 sheet 枚举。

通用规则:使用现代 SwiftUI 状态(@State、@Binding、@Observable、@Environment),避免不必要的视图模型;若部署目标含 iOS 16 或更早、无法使用 iOS 17 的 Observation API,则回退到 ObservableObject 配合 @StateObject(根持有)、@ObservedObject(注入观察)与 @EnvironmentObject(仅真正共享的应用级状态)。优先组合、保持视图小而专注;用 async/await 配合 .task 与显式加载/错误状态;共享应用服务放 @Environment,功能局部依赖优先显式初始化注入;优先选用适配部署目标的最新 SwiftUI API 并标注最低 OS;仅在编辑遗留文件时保留遗留模式。Sheets 优先 .sheet(item:) 而非 .sheet(isPresented:),避免在 sheet 体内使用 if let,sheet 应自持动作并内部调用 dismiss()。滚动驱动揭示优先从滚动偏移推导归一化进度值作为单一事实来源。

状态归属:局部 UI 状态用 @State;子视图修改父级值状态用 @Binding;iOS 17+ 根持有的引用模型用 @State 配合 @Observable 类型;子视图读写注入的 @Observable 模型时显式作为存储属性传入;共享应用服务或配置用 @Environment(Type.self);iOS 16 及更早的遗留引用模型在根用 @StateObject、注入时用 @ObservedObject。先确定归属位置再选包装器。

交叉参考:navigationstack.md(导航归属、每标签历史、枚举路由)、sheets.md(集中式模态呈现与枚举驱动 sheet)、deeplinks.md(URL 处理与外部链接路由)、app-wiring.md(根依赖图、环境用法、应用外壳接线)、async-state.md(.task、.task(id:)、取消、防抖与异步 UI 状态)、previews.md(#Preview、fixtures、mock 环境)、performance.md(稳定标识、观察范围、惰性容器与渲染成本护栏)。

反模式:巨型视图混合布局、业务逻辑、网络、路由与格式化;用多个布尔标志表示互斥的 sheet、alert 或导航目标;在 body 驱动的代码路径中直接调用实时服务;用 AnyView 绕过本应通过更好组合解决的类型不匹配;无明确归属理由就把所有共享依赖默认设为 @EnvironmentObject 或全局路由。

新视图工作流:先定义状态、归属位置与最低 OS 假设,再写 UI 代码;区分哪些依赖属于 @Environment、哪些保留为显式初始化输入;勾勒视图层级、路由模型与呈现点,抽取重复部分为子视图;用 .task 或 .task(id:) 实现异步加载并加显式加载与错误状态;为主要与次要状态添加预览,交互 UI 添加无障碍标签或标识符;通过构建验证无编译错误、预览不崩溃、状态变更正确传播,并检查列表标识与观察范围不会造成可避免的重渲染。

组件参考:以 references/components-index.md 为入口,每个组件参考应包含意图与最适场景、符合本地约定的最小用法、陷阱与性能说明、当前仓库中现有示例路径。新增组件参考时创建 references/<component>.md,保持简短可操作并链接具体文件,同时更新索引。

限制:资料未提供具体价格、收费、平台支持范围或效果数据;示例命令与文件路径需结合具体项目环境使用。