关于 swiftui-ui-patterns
swiftui-ui-patterns 为 SwiftUI 开发提供界面构建指导和组件参考,适用于维护现有项目或搭建新界面。内容涵盖状态管理、导航、表单式工作流、异步加载与无障碍验证。
主要功能
- 01SwiftUI 状态与数据流建议
- 02视图组合和组件参考
- 03TabView、导航与表单模式
- 04异步加载及错误状态
- 05无障碍标注与构建验证
适用场景
- 01在现有项目中添加 SwiftUI 屏幕
- 02搭建含标签页和导航的新应用界面
- 03实现由选中项目驱动的表单
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dagba/ ios-mcp --skill swiftui-ui-patterns安装后在 Claude Code 中输入/swiftui-ui-patterns确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/app-wiring.mdcomponents-index.mdcontrols.mddeeplinks.mdfocus.mdform.mdgrids.mdhaptics.mdinput-toolbar.mdlightweight-clients.mdlist.mdloading-placeholders.mdmacos-settings.mdmatched-transitions.mdmedia.mdmenu-bar.mdnavigationstack.mdoverlay.mdscrollview.mdsearchable.mdsheets.mdsplit-views.mdSwiftUI-AlarmKit-Integration.mdSwiftUI-New-Toolbar-Features.mdSwiftUI-Styled-Text-Editing.mdSwiftUI-WebKit-Integration.mdtabview.mdtheming.mdtitle-menus.mdtop-bar.md详细介绍
SwiftUI UI 模式
快速开始
根据你的目标选择一条路径:
现有项目
- 确定功能或界面,以及主要交互模式(列表、详情、编辑器、设置、标签页)。
- 使用
rg "TabView\("或类似命令,在仓库中查找相近示例,然后阅读最接近的 SwiftUI 视图。 - 遵循项目的本地约定:优先使用 SwiftUI 原生状态,尽可能将状态保留在本地,并使用环境注入共享依赖项。
- 从
references/components-index.md中选择相关组件参考,并遵循其中的指导。 - 使用小型、专注的子视图构建视图,并采用 SwiftUI 原生数据流。
新项目脚手架
- 从
references/app-scaffolding-wiring.md开始,配置 TabView + NavigationStack + sheets。 - 根据提供的骨架添加最精简的
AppTab和RouterPath。 - 根据你首先需要的 UI(TabView、NavigationStack、Sheets),选择下一份组件参考。
- 添加新界面时,扩展路由和 sheet 枚举。
通用规则
- 使用现代 SwiftUI 状态(
@State、@Binding、@Observable、@Environment),避免不必要的视图模型。 - 优先使用组合;保持视图小巧且专注。
- 使用
.task配合 async/await,并明确处理加载和错误状态。 - 仅在编辑旧版文件时保留现有旧版模式。
- 遵循项目的格式化工具和风格指南。
- Sheets:当状态表示一个选中的模型时,优先使用
.sheet(item:),而不是.sheet(isPresented:)。避免在 sheet 主体中使用if let。Sheet 应自行管理操作,并在内部调用dismiss(),而不是转发onCancel/onConfirm闭包。
新建 SwiftUI 视图的工作流
- 定义视图的状态及其所属位置。
- 确定要通过
@Environment注入的依赖项。 - 规划视图层级,并将重复部分提取为子视图。
- 使用
.task实现异步加载;如有需要,使用明确的状态枚举。 - 当 UI 可交互时,添加无障碍标签或标识符。
- 通过构建进行验证,并在需要时更新使用该视图的调用点。
组件参考
将 references/components-index.md 作为入口。每份组件参考应包含:
- 意图和最适用的场景。
- 遵循本地约定的最简用法。
- 常见问题和性能说明。
- 当前仓库中现有示例的路径。
Sheet 模式
由项目驱动的 sheet(首选)
@State private var selectedItem: Item?
.sheet(item: $selectedItem) { item in
EditItemSheet(item: item)
}
Sheet 自行管理操作
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/<component>.md。 - 内容保持简短且便于执行;链接到当前仓库中的具体文件。
- 在
references/components-index.md中添加新条目。
Apple 官方文档
参考以下文档,了解最新的 SwiftUI API 和集成模式:
references/SwiftUI-WebKit-Integration.md- 在 SwiftUI 中集成 WebKit 视图的官方指南references/SwiftUI-Styled-Text-Editing.md- SwiftUI 中的富文本编辑与样式设置references/SwiftUI-New-Toolbar-Features.md- 最新的工具栏自定义功能与特性references/SwiftUI-AlarmKit-Integration.md- AlarmKit 集成模式与示例
这些文档包含 iOS 26+ 功能的 Apple 官方模式;实现相关功能时应查阅这些文档。
评论
支持 Markdown