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
相关产品推荐
相关产品推荐

