【发布时间】:2020-03-20 00:03:24
【问题描述】:
不确定我是否遗漏了什么或发现了 SwiftUI 错误。这是一件如此简单的事情,它让我发疯。
尝试设置 UIViewControllerRepresentable 但出现以下错误:
协议“视图”要求“_makeView(view:inputs:)”不能被非最终类(“VideoAnswerWrapper”)满足,因为它在非参数、非结果类型位置使用“Self”
协议“视图”要求“_makeViewList(view:inputs:)”不能由非最终类(“VideoAnswerWrapper”)满足,因为它在非参数、非结果类型位置使用“Self”
我试过了:
- 将“VideoAnswerViewController”切换为 'VideoAnswerWrapper.UIViewControllerType'
- 重启 Xcode、清除缓存、派生数据等
- 从一个空白的 ViewController 开始,以确保它不奇怪 故事板问题
- 关闭 Xcode 版本并尝试 11.4 测试版。
- 实例化 VideoAnswerViewController 的不同方法
- 在类中添加“final”
这是我的 UIViewControllerRepresentable 类:
import SwiftUI
class VideoAnswerWrapper: UIViewControllerRepresentable {
typealias UIViewControllerType = VideoAnswerViewController
private var question : Question!
init(question: Question?) {
guard let question = question else {fatalError()}
self.question = question
}
func makeUIViewController(context: UIViewControllerRepresentableContext<VideoAnswerWrapper>) -> VideoAnswerViewController {
let storyboard = UIStoryboard(name: "VideoAnswer", bundle: .main)
//Downcast returned controller to the requried type
guard let viewController = storyboard.instantiateInitialViewController() as? VideoAnswerViewController else { fatalError() }
//Assign selected question object to instance property on incoming viewController.
// viewController.question = question
return viewController
}
func updateUIViewController(_ uiViewController: VideoAnswerViewController, context: UIViewControllerRepresentableContext<VideoAnswerWrapper>) {
}
}
UIViewController(我已经剥离了所有功能以隔离错误)
import UIKit
class VideoAnswerViewController: UIViewController {
}
【问题讨论】:
-
如果我将您的代码粘贴到游乐场并将其中的一行更改为
final class VideoAnswerWrapper: UIViewControllerRepresentable {,错误就会消失。您确定添加“final”至少不会更改错误吗? -
@PhillipMills ......我无语了。我已经尝试使 VideoAnswerViewController 最终但不是包装类。我已经坚持了几个小时。谢谢!如果您想要功劳,可以将其作为答案发布。
-
没关系。我假设投诉是关于
VideoAnswerWrapper,因为错误是关于它采用的协议。这不像我确定的那样。 :) -
@PhillipMills 值得回答,因为肯定会为其他人出现。
-
通常 UIViewControllerRepresentable 和 UIViewController 应该是结构体。