问题描述
我有一个名为 appState 的 EnvironmentObject,它可以通过我的一些视图访问以共享数据/状态。我在视图中使用它们的方式是这样的:
struct MetalView: NSViewRepresentable {
@EnvironmentObject var appState: AppState
如何从视图的 Coordinator 类访问 appState?
“不能在嵌套类型“MetalView.Coordinator”的实例上使用“MetalView”类型的实例成员“appState””
有什么线索吗?
解决方法
这是我解决这个问题的方法:
AppState.swift:
class AppState: ObservableObject {
static let shared = AppState()
init () {} // TODO: was private init,find out if this has benefits
@Published var currentView: String = "login"
// add rest of shared stuff below
AppDelegate.swift:
func applicationDidFinishLaunching(_ aNotification: Notification) {
let appState = AppState.shared
从 SwiftUI 视图访问:
struct ContentView: View {
@EnvironmentObject var appState: AppState
从 NSViewRepresentable / UIViewRepresentable Coordinator 类访问:
class Coordinator: NSObject,MTKViewDelegate {
...
func draw(in view: MTKView) {
...
context.render((AppState.shared.rawImage ?? AppState.shared.rawImageOriginal)!,to: drawable.texture,commandBuffer: commandBuffer,bounds: AppState.shared.rawImageOriginal!.extent,colorSpace: colorSpace)
}
...
这花了我很多时间才弄明白,所以我希望它可以帮助一些刚开始 SwiftUI 程序员的小伙伴......
如果高级程序员可以改进这一点,请这样做,我可以从中学习。