Blog Logo

25 Dec 2025 ~ 4 min read

AI 生成 Swift 代码的最佳修复实践 (基于 Hacking with Swift)


AI 生成 Swift 代码的最佳修复实践 (基于 Hacking with Swift)

本文总结了针对 iOS 18+ 环境下,AI 生成的 Swift/SwiftUI 代码中常见的过时或非最佳实践,并提供了相应的现代替代方案。

UI 与 样式 (SwiftUI)

  1. 颜色与样式

    • ❌ 避免:foregroundColor()
    • ✅ 推荐:foregroundStyle() (支持更多样式,不仅限于颜色)
  2. 圆角

    • ❌ 避免:cornerRadius()
    • ✅ 推荐:clipShape(.rect(cornerRadius:)) (支持平滑圆角等更多特性)
  3. 字体

    • ❌ 避免:.font(.system(size: 18)) (固定大小)
    • ✅ 推荐:动态类型字体 (如 .font(.body), .font(.headline)),以支持无障碍缩放。
  4. 布局与几何

    • ❌ 避免:滥用 GeometryReader 和硬编码 Frame。
    • ✅ 推荐:优先使用 visualEffect()containerRelativeFrame()
  5. 列表与导航

    • ❌ 避免:NavigationView
    • ✅ 推荐:NavigationStack
    • ❌ 避免:在 List 中使用内联 NavigationLink
    • ✅ 推荐:使用 navigationDestination(for:) 进行数据驱动导航。

交互与状态管理

  1. 按钮

    • ❌ 避免:给普通 View 加 onTapGesture()
    • ✅ 推荐:使用 Button (更好的无障碍支持和点击态)。
    • ❌ 避免:Label("Title", systemImage: "icon") 作为 Button 内容
    • ✅ 推荐:Button("Title", systemImage: "icon") { ... } (内联 API)。
  2. 状态观察

    • ❌ 避免:ObservableObject + @Published
    • ✅ 推荐:@Observable 宏 (更简单,性能更好,View 更新更精准)。
    • 注意:在使用 @Observable 时,应将计算属性中的复杂 View 拆分为独立的 SwiftUI View,以避免不必要的整体刷新。
  3. 变化监听

    • ❌ 避免:onChange(of: value) { newValue in } (单参数闭包,已弃用)
    • ✅ 推荐:onChange(of: value) { oldValue, newValue in } (双参数闭包)。

数据与并发 (Swift / SwiftData)

  1. SwiftData 与 CloudKit

    • ⚠️ 警告@Attribute(.unique) 与 CloudKit 不兼容。如果启用 iCloud 同步,必须移除唯一性约束。
  2. 并发

    • ❌ 避免:滥用 DispatchQueue.main.async
    • ✅ 推荐:现代并发模型。注意新项目默认启用 Main Actor 隔离,通常无需手动标记。
    • ❌ 避免:Task.sleep(nanoseconds:)
    • ✅ 推荐:Task.sleep(for:) (更易读的时间单位)。
  3. 文件系统

    • ❌ 避免:繁琐的 FileManager 查找代码。
    • ✅ 推荐:URL.documentsDirectory

代码结构与格式

  1. 图片渲染

    • ❌ 避免:UIGraphicsImageRenderer
    • ✅ 推荐:ImageRenderer (SwiftUI 原生)。
  2. 格式化

    • ❌ 避免:String(format: "%.2f", value)
    • ✅ 推荐:value.formatted() (Swift 原生格式化 API)。
  3. 代码组织

    • ❌ 避免:将大量类型定义在同一个文件中 (增加编译时间)。
    • ✅ 推荐:每个类型一个文件。
  4. Tab 视图

    • ❌ 避免:旧版 .tabItem()
    • ✅ 推荐:新版 Tab API (iOS 18+)。