我正在尝试创建一个UIViewControllerRepresentable
结构体,但 Xcode 一直抱怨实现存根
struct PassVC: UIViewControllerRepresentable {
typealias UIViewControllerType = UIViewController
func makeUIViewController(context: Context) -> UIViewController {
let vc = UIViewController()
vc.view.backgroundColor = .yellow
return vc
}
func updateUIViewController(_ uiViewController: UIViewController, context: Context) {
}
}
我先添加了 typealias,然后手动输入,最后让 Xcode 实现存根,也手动输入,但所有尝试都以 Xcode 报错,说没有实现存根。如果我点击“修复”,它会报错说存根方法需要重新声明。有人在 Xcode 中遇到过同样的问题吗?我的 Xcode 版本是 16.0。
一个典型的解决办法:根本不使用
typealias UIViewControllerType
Xcode 16 似乎遇到了这个问题——只需删除
typealias
,然后使用通用形式:如果返回类型是具体的(例如
MyCustomViewController
),请使用具体的类型而不是具体的类型some UIViewController
。这应该会让编译器满意。另一个解决方法:直接声明具体类型(类型推断的首选)
并且根本不包括。
typealias UIViewControllerType = UIViewController
尽管 SwiftUI 的协议经常说你应该包含它,但当你这样做时,Xcode 16 目前会感到困惑。
您可能还需要考虑清理构建文件夹并重置派生数据:
如果您已经有正确的代码,但 Xcode 坏了:**
Shift + Cmd + K
~/Library/Developer/Xcode/DerivedData/
有时,在测试版或 Swift 版本之间切换后,Xcode 的协议一致性缓存会被损坏。
最后你会得到如下代码:
问题在于,有一个名为 Context 的自定义结构体,它与 UIViewControllerRepresentable 方法所需的 Context 类型冲突。更改结构体名称解决了这个问题。