尝试使用环境变量从 HostingViewController 呈现 SwiftUI

p0n*_*0ny 3 swift swiftui

我正在尝试使用以下代码从 UI Kit 展示一些 SwiftUI:

class SavedListViewController: UIHostingController<SavedEventListView> {
    required init?(coder: NSCoder) {

        let listView = SavedEventListView().environmentObject(RemindersViewModel())
        super.init(rootView: listView) // BUILD ERROR HERE = "Cannot convert value of type 'some View' to expected argument type 'SavedEventListView'"
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我得到 Cannot convert value of type 'some View' to expected argument type 'SavedEventListView'

如果我尝试强制铸造listViewSavedEventListView,应用程序崩溃。

如果我不提供环境变量,应用程序也会崩溃。

无法将“SwiftUI.ModifiedContent<_.SavedEventListView, SwiftUI.EnvironmentKeyWritingModifier.RemindersViewModel>>>”(0x7fff89e46b90)类型的值转换为“_.SavedEventListView”(0x10a2447d0)。

有关如何解决此问题并呈现此 swiftui 视图的任何建议?谢谢

其他代码

class RemindersViewModel: ObservableObject {
    @Published var savedEvents = RemindersStore().fetchRuns()
}

struct SavedEventListView: View {

    @EnvironmentObject var reminders: RemindersViewModel

    var body: some View {
        NavigationView {
            List {
                ForEach(reminders.savedEvents) { reminder in
                    HStack {
                        VStack(alignment: .leading) {
                            HStack {
                                Text("$\(reminder.title)")
                                    .font(.headline)

                                Text("$\(reminder.category)")
                                    .font(.headline)
                                    .fontWeight(.light)
                            }
                            Spacer()
                            Text("$\(reminder.date)")
                                .font(.subheadline)
                        }
                        Spacer()
                        Image(uiImage: UIImage(systemName: "calendar.badge.minus")!)
                    }
                }
            }
            .navigationBarTitle("Reminders")
        }
    }
}





Run Code Online (Sandbox Code Playgroud)

Asp*_*eri 5

这是我将使用的最简单的变体:

class SavedListViewController: UIHostingController<AnyView> {
    required init?(coder: NSCoder) {

        let listView = SavedEventListView().environmentObject(RemindersViewModel())
        super.init(rootView: AnyView(listView))
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}
Run Code Online (Sandbox Code Playgroud)