UIViewControllerRepresentable - “非最终类无法满足协议” - SwiftUI

Alp*_*ulf 5 xcode ios swift swiftui

不确定我是否遗漏了某些内容或发现了 SwiftUI 错误。这是一件如此简单的事情,却让我发疯。

尝试设置 UIViewControllerRepresentable 但出现以下错误:

非最终类(“VideoAnswerWrapper”)无法满足协议“View”要求“_makeView(view:inputs:)”,因为它在非参数、非结果类型位置使用“Self”

非最终类(“VideoAnswerWrapper”)无法满足协议“View”要求“_makeViewList(view:inputs:)”,因为它在非参数、非结果类型位置使用“Self”

我看到的错误

我试过了:

  • 将“VideoAnswerViewController”切换为“VideoAnswerWrapper.UIViewControllerType”
  • 重启Xcode、清除缓存、导出数据等。
  • 从空白 ViewController 开始,以确保这不是一个奇怪的故事板问题
  • 切换 Xcode 版本并尝试 11.4 beta。
  • 实例化 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>) {
        
    }
}
Run Code Online (Sandbox Code Playgroud)

UIViewController(我已经剥离了所有功能以隔离错误)

import UIKit

class VideoAnswerViewController: UIViewController {

}
Run Code Online (Sandbox Code Playgroud)

Asp*_*eri 12

class VideoAnswerWrapper: UIViewControllerRepresentable {

    typealias UIViewControllerType = VideoAnswerViewController
Run Code Online (Sandbox Code Playgroud)

上面的内容旨在呈现一个 SwiftUI View,因此必须是如下结构

struct VideoAnswerWrapper: UIViewControllerRepresentable {

    typealias UIViewControllerType = VideoAnswerViewController
Run Code Online (Sandbox Code Playgroud)