将环境对象从NSHostingController传递到SwiftUI视图

时间:2020-03-08 19:21:45

标签: macos swiftui

我有一个macOS故事板应用程序,其中有一个NSHostingController托管的SwiftUI视图。我需要从我的NSHostingController传递一个EnvironmentObject到这个SwiftUI视图。我无法实现这一目标。我目前已编写此代码,但无法正常工作。这里可能是什么问题?

import Cocoa
import SwiftUI

class SearchText: ObservableObject {
    @Published var text = ""
}

class HostingController: NSHostingController<SwiftUIView> {


    @objc required dynamic init?(coder: NSCoder) {

        super.init(coder: coder, rootView: SwiftUIView().environmentObject(SearchText()))
    }
}

1 个答案:

答案 0 :(得分:4)

问题在于修饰符.environmentObject返回的类型与您在泛型中指定的类型不同,即SwiftUIView

这是可行的方法

class HostingController: NSHostingController<AnyView> {

    @objc required dynamic init?(coder: NSCoder) {
        super.init(coder: coder, rootView: 
            AnyView(SwiftUIView().environmentObject(SearchText())))
    }
}