swift - UIHostingController 抛出

标签 swift swiftui

我想从 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/

相关文章:

swift - 检查 viewcontroller 是否从它的父 VC 中呈现另一个

swift - 如何访问 ioctl()

swift - CBCentralManagerDelegate didRetrievePeripherals 未找到

ios - Xcode 12b1 和 Swift 包 : Custom Fonts

swift - Swift 中的不明确引用

swift - 高阶函数 : "Cannot invoke ' map' with an argument list of type '((_) -> _)' "

SwiftUI ObservedObject Binding KeyPath 下标错误

ios - SwiftUI 应用程序崩溃并出现 "attempt to insert row 2 into section 0, but there are only 2 rows in section 0 after the update"错误

swift - 哪里可以看到swiftUI的源代码?

validation - SwiftUI 验证和否决用户输入