技能 swiftui-expert-skill
📱

swiftui-expert-skill

安全

使用专业最佳实践构建现代 SwiftUI 应用

也可从以下获取: avdlee

SwiftUI 开发者在状态管理和过时的 API 模式方面面临挑战。本技能提供基于事实的现代 SwiftUI 开发指导,涵盖 @Observable、正确的视图组合以及 iOS 26+ Liquid Glass 样式。

支持: Claude Codex Code(CC)
🥉 74 青铜
1

下载技能 ZIP

2

在 Claude 中上传

前往 设置 → 功能 → 技能 → 上传技能

3

开启并开始使用

测试它

正在使用“swiftui-expert-skill”。 审查此视图:struct ProductView: View { @StateObject var vm: ProductViewModel; var body: some View { Text(vm.title) } }

预期结果:

发现的问题:(1) 与 ObservableObject 一起使用 @StateObject - 新代码应优先使用带有 @State 的 @Observable 类。(2) StateObject 应该声明为 private。(3) 如果是只读值,考虑将 title 作为 let 参数传递。建议:使用 @Observable 类,将 @State 标记为 private,直接传递只读值。

正在使用“swiftui-expert-skill”。 当点击列表行时,我如何处理导航到详情视图?

预期结果:

使用 NavigationStack 配合 navigationDestination 实现类型安全的导航。在根节点用 NavigationStack 替换 NavigationView。使用带有 value 参数的 NavigationLink 和 navigationDestination(for:) 修饰符。与旧的 NavigationView 模式相比,这提供了编译时安全性和正确的状态管理。

安全审计

安全
v1 • 2/25/2026

Static analyzer produced 226 false positive findings due to pattern matching on markdown documentation content. External command patterns matched file path references like 'references/state-management.md' and Swift code examples, not actual shell execution. Network finding was a GitHub source URL in YAML frontmatter. All blocker findings for cryptographic algorithms and system reconnaissance are incorrect pattern matches on documentation text. No executable code or security risks present.

1
已扫描文件
276
分析行数
0
发现项
1
审计总数
未发现安全问题
审计者: claude

质量评分

38
架构
100
可维护性
87
内容
50
社区
100
安全
91
规范符合性

你能构建什么

iOS 开发者构建新功能

在创建新的 SwiftUI 视图时使用,确保使用 @Observable 进行正确的状态管理,正确使用 foregroundStyle() 和 NavigationStack 等现代 API,并从一开始就采用最优的视图结构。

现有 SwiftUI 项目的代码审查

在审计传统 SwiftUI 代码时使用,用于识别已弃用的 API、错误的属性包装器、性能反模式以及现代化改进机会。

学习现代 SwiftUI 模式

在从 UIKit 或旧版 SwiftUI 过渡时使用,学习数据流、视图组合和 Apple 设计指南的当前最佳实践。

试试这些提示

基础代码审查
审查此 SwiftUI 视图的状态管理和现代 API 使用情况。检查属性包装器选择、已弃用的 API 以及视图组合模式。
重构传统代码
将此 SwiftUI 代码重构为使用现代 API。用 @Observable 替换 ObservableObject,更新已弃用的修饰符,并优化视图结构以提升性能。
实现新功能
帮助我构建一个具有正确数据流的 SwiftUI 新功能。使用 @Observable 设计状态管理,构建视图以优化 diff,并在适当位置应用 iOS 26+ 样式。
调试性能问题
分析此 SwiftUI 视图的性能问题。识别不必要的状态更新、ForEach 中的视图标识问题、热点路径优化以及布局抖动原因。

最佳实践

  • 对于新的 SwiftUI 代码,优先使用 @Observable 而非 ObservableObject,配合 @MainActor 确保线程安全
  • 保持视图 body 简单且纯粹 - 将复杂逻辑提取到模型和子视图中
  • 在 ForEach 中使用稳定的标识和唯一标识符,动态内容永远不要使用 .indices

避免

  • 将传递的值声明为 @State 或 @StateObject,而不是使用 @Binding 或 let 参数
  • 在存在 containerRelativeFrame 或 visualEffect 替代方案时使用 GeometryReader
  • 在视图 body 中直接创建对象或执行重量级计算

常见问题

我应该为新的 SwiftUI 项目使用 @Observable 还是 ObservableObject?
所有新代码都应使用 @Observable。它提供无需 @Published 的自动观察功能,支持嵌套对象,并与 Swift 并发集成。仅在维护传统代码时使用 ObservableObject。
什么时候应该使用 @Binding,什么时候应该直接传递值?
当子视图需要修改父视图的状态时使用 @Binding。对于只读值使用 let。如果需要响应变化但不需要修改,使用带有 .onChange() 修饰符的 var。
iOS 应用是否必须使用 Liquid Glass 样式?
不,Liquid Glass 仅在 iOS 26+ 上可用,只应在明确要求时采用。本技能提供使用 .ultraThinMaterial 的早期 iOS 版本回退模式。
为什么我的 ForEach 在处理动态数组时会崩溃?
当数组顺序改变时,使用 .indices 作为标识会失败。始终使用稳定的唯一标识符(如 id 属性)。对于动态内容,确保每个元素在更新过程中具有一致的唯一标识。
如何调试 SwiftUI 中的意外视图重新渲染?
在视图 body 中添加 Self._printChanges() 以记录触发更新的内容。常见原因包括传递大型配置对象、冗余的状态赋值以及依赖频繁变化的值。
这个技能能否强制执行特定的架构(如 MVVM)?
不,本技能专注于事实和最佳实践,而非架构观点。它鼓励将业务逻辑分离以提高可测试性,但不强制特定模式(如 MVVM 或 VIPER)。

开发者详情

文件结构

📄 SKILL.md