Как я могу получить доступ к EnvironmentObject из класса координатора NSViewRepresentable/UIViewRepresentable?
У меня есть EnvironmentObject с именем appState, доступ к которому осуществляется через некоторые из моих представлений для обмена данными/состояниями. Я использую их в представлении следующим образом:
struct MetalView: NSViewRepresentable {
@EnvironmentObject var appState: AppState
Как я могу получить доступ к appState из класса координатора моего представления?
Когда я пытаюсь вызвать его любым способом, который я пробовал, я получаю эту ошибку:
«Член экземпляра appState типа MetalView нельзя использовать в экземпляре вложенного типа MetalView.Coordinator».
Любые подсказки?
1 ответ
Вот как я решил это:
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:
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...
Если продвинутые программисты могут улучшить это, пожалуйста, сделайте так, чтобы я мог извлечь из этого уроки.