UIHostingController 抛出

amo*_*mok 4 swift swiftui

我想从 UIViewController 加载一个基于 SwiftUI 的视图,该视图读取包本地的 json。swiftUI only 项目中的代码和绑定工作正常,当我利用 UIHostingController 时,我收到一个错误,我正在寻求帮助修复。

class ProgramsListVCHost : UIHostingController<ProgramsList>, Storyboarded {
    weak var coordinator: MainCoordinator?

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder, rootView: ProgramsList())

    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码崩溃是因为我没有通过导致模型初始化所需的内容。

super.init(coder: aDecoder, rootView: ProgramsList().environmentObject(ProgramUserData()))
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做,编译器要求我将整个内容转换为基础类 ProgramList(无法将“some View”类型的值转换为预期的参数类型“ProgramsList”)

如果我确实应用了推荐的修复程序,代码会因错误而崩溃:

无法将“SwiftUI.ModifiedContent>>”(0x7fff89d0ec68)类型的值转换为“bikeit.ProgramsList”(0x110477328)。2019 年 11 月 15 日 14:36:26.049041-0500 自行车 [13658:8386085] 无法将“SwiftUI.ModifiedContent>>”(0x7fff89d0ec68)类型的值转换为“bikeit.ProgramsList4”(0x3280)。(lldb)

我不明白如何初始化我必须传递的对象才能使其工作。

Asp*_*eri 5

当然,这是因为您声明的内容UIHostingController<ProgramsList>ProgramsList,所以它在初始化程序中是预期的,但是您将 的输出传递给它.environmentObject,即SwiftUI.ModifiedContent,因此类型检查失败并且您得到编译器错误。

目前尚不清楚您的需求,但可能的解决方案如下:

class ProgramsListVCHost : UIHostingController<AnyView>, Storyboarded {
    weak var coordinator: MainCoordinator?

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder, rootView: AnyView(ProgramsList().environmentObject(ProgramUserData())))
    }
}
Run Code Online (Sandbox Code Playgroud)