You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xcode 15.0.1使用#Preview出现init(_:traits:body:)歧义使用错误

解决SwiftUI预览「Ambiguous use of 'init(_:traits:body:)'」错误

针对你遇到的新旧预览语法均报错、但模拟器可正常运行的问题,可尝试以下针对性解决步骤:

  • 清理Xcode缓存与派生数据
    这是预览服务缓存冲突的常见解决方式:

    1. 按下 Cmd+Shift+K 清理Build Folder;
    2. 打开Xcode偏好设置(Cmd+,)→ 选择「Locations」→ 点击Derived Data路径旁的箭头,删除对应项目的派生数据文件夹;
    3. 关闭并重新打开Xcode后重试预览。
  • 明确预览闭包的返回类型
    强制指定返回类型可避免Swift类型推断的歧义,修改后的代码如下:
    新语法:

    #Preview {
        let viewModel = RecordingDetailViewModel(recording: nil, viewContext: PersistenceController.preview.container.viewContext)
        return TranscribingTransitionView(viewModel: viewModel) as View
    }
    

    旧语法:

    struct TranscribingTransitionView_Previews: PreviewProvider {
      static var previews: some View {
        let viewModel = RecordingDetailViewModel(recording: nil, viewContext: PersistenceController.preview.container.viewContext)
        return TranscribingTransitionView(viewModel: viewModel) as View
      }
    }
    
  • 明确ViewModel初始化的参数类型
    若RecordingDetailViewModel存在重载的init方法,可能导致nil的类型推断模糊,可显式指定参数类型:

    let viewModel = RecordingDetailViewModel(recording: Recording?.none, viewContext: PersistenceController.preview.container.viewContext)
    
  • 重启预览服务与Xcode
    预览进程异常卡死时:

    1. 点击预览面板的「重启」按钮;
    2. 若无效,强制退出Xcode(Cmd+Q),并在Activity Monitor中结束所有「Xcode Preview」进程,再重新打开项目。
  • 升级Xcode到最新稳定版
    早期版本的#Preview宏存在语法解析bug,升级到最新版Xcode(如15.x系列)可修复多数预览兼容性问题。

内容的提问来源于stack exchange,提问作者Ollie Khakwani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 03:10:03