SwiftUI 开发者在状态管理和过时的 API 模式方面面临挑战。本技能提供基于事实的现代 SwiftUI 开发指导,涵盖 @Observable、正确的视图组合以及 iOS 26+ Liquid Glass 样式。
下载技能 ZIP
在 Claude 中上传
前往 设置 → 功能 → 技能 → 上传技能
开启并开始使用
测试它
正在使用“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 模式相比,这提供了编译时安全性和正确的状态管理。
安全审计
安全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.
质量评分
你能构建什么
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 中直接创建对象或执行重量级计算