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

Xcode Swift预览报错:Unknown preview provider "<classname>_" 求助

解决Swift预览「Unknown preview provider」错误的方案

检查自定义预览扩展的正确性

你代码里用的showPreview()应该是自定义的UIView扩展方法,先确认这个扩展的实现没有问题——如果扩展逻辑出错,会直接导致预览系统无法识别正确的提供者。标准的UIView转SwiftUI预览的扩展写法应该是这样:

extension UIView {
    func showPreview() -> some View {
        UIViewPreview { self }
    }
}

struct UIViewPreview<View: UIView>: UIViewRepresentable {
    let view: View
    
    init(_ builder: @escaping () -> View) {
        view = builder()
    }
    
    func makeUIView(context: Context) -> View { view }
    func updateUIView(_ uiView: View, context: Context) {}
}

确认预览结构体的访问权限

默认的结构体是internal访问权限,如果你的DetailsViewPreview被意外标记为private/fileprivate,或者所在模块和主代码不匹配,预览系统会找不到它。确保预览结构体在当前模块可访问:

@available(iOS 13, *)
struct DetailsViewPreview: PreviewProvider { // 保持默认internal即可,无需额外修饰,除非跨模块
  static var previews: some View {
    DetailsView().showPreview()
  }
}

清理Xcode缓存并重启

Xcode的缓存经常会导致预览系统识别异常,按以下步骤操作:

  • 关闭Xcode
  • 删除~/Library/Developer/Xcode/DerivedData路径下的DerivedData文件夹
  • 重新打开项目,按Cmd+Shift+K清理项目,再按Cmd+B重新构建,最后尝试预览

排查命名冲突

虽然你说项目名不以数字开头,但还是要检查是否存在重复的类/结构体命名,或者模块名包含特殊字符。确保DetailsView和DetailsViewPreview在当前模块是唯一的,没有和第三方库命名撞车。

改用标准预览写法排查问题

如果自定义的showPreview()始终有问题,直接用原生的UIViewRepresentable写法测试,排除扩展的影响:

#if DEBUG
import SwiftUI

@available(iOS 13, *)
struct DetailsViewPreview: PreviewProvider {
  static var previews: some View {
    UIViewRepresentable {
      DetailsView(frame: UIScreen.main.bounds)
    }
  }
}
#endif

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 06:15:30