我想从 UIViewController 加载一个基于 SwiftUI 的 View ,该 View 读取包本地的 json。仅 swiftUI 项目中的代码和绑定(bind)工作正常,当我利用 UIHostingController 时出现错误,我正在寻求帮助修复。
class ProgramsListVCHost : UIHostingController, 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
ĐúngProgramsList
, 所以它在初始化程序中是预期的,但是你传递给它输出 .environmentObject
,Ngay lập tức SwiftUI.ModifiedContent
,所以类型检查失败,你会得到编译器错误。
不清楚您的需求,但可能的解决方案如下:
class ProgramsListVCHost : UIHostingController, Storyboarded {
weak var coordinator: MainCoordinator?
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder, rootView: AnyView(ProgramsList().environmentObject(ProgramUserData())))
}
}
gia hạn:找到备用
class ProgramsListVCHost : UIHostingController, 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())
}
}
Tôi là một lập trình viên xuất sắc, rất giỏi!