gpt4 book ai didi

swift - UIHostingController 抛出

转载 作者:行者123 更新时间:2023-11-28 07:18:27 28 4
gpt4 key购买 nike

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

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

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

}
}

上面的代码崩溃了,因为我没有传递我应该导致模型初始化的东西。

super.init(coder: aDecoder, rootView: ProgramsList().environmentObject(ProgramUserData()))

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

如果我确实应用了建议的修复,代码会崩溃并出现以下错误:

Could not cast value of type 'SwiftUI.ModifiedContent>>' (0x7fff89d0ec68) to 'bikeit.ProgramsList' (0x110477328). 2019-11-15 14:36:26.049041-0500 bikeit[13658:8386085] Could not cast value of type 'SwiftUI.ModifiedContent>>' (0x7fff89d0ec68) to 'bikeit.ProgramsList' (0x110477328). (lldb)

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

最佳答案

当然是因为你声明的内容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())))
}
}

更新:找到备用

class ProgramsListVCHost : UIHostingController<ProgramsListVCHost.MyView>, Storyboarded {

// Internal view
struct MyView: View {
var body: some View {
ProgramsList().environmentObject(ProgramUserData())
}
}

weak var coordinator: MainCoordinator?

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

关于swift - UIHostingController 抛出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58885750/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com