Swifui: приложение для macOS: выборка основных данных в contentView в порядке, но как использовать результат из AppDelegate?

#swiftui #observableobject #environmentobject

#swiftui #observableobject #environmentobject

Вопрос:

С Xcode 11.6 (11E708), SwiftUI, для приложения macOS, у меня есть данные, сгенерированные в ContentView.swift . Но я не могу использовать эти данные внутри AppDelegate.swift :

Сборка прошла успешно, но print(contentView.order.item) (пожалуйста, смотрите ниже) выдает это сообщение:

Поток 1: неустранимая ошибка: не найден ObservableObject типа Order. View.environmentObject(_:) для упорядочения может отсутствовать как предок этого представления.

Чего я не понимаю?

В contentView.swift:

 import SwiftUI
public class Order: ObservableObject {
    @Published var item = "Hello"
}
...
@EnvironmentObject var order: Order
...
  

В AppDelegate.swift:

 func applicationDidFinishLaunching(_ aNotification: Notification) {
    ... 
    let contentView = ContentView()
    print(contentView.order.item)
    ...
  

Ответ №1:

Вам нужно внедрить Order в среду, если она будет использоваться в качестве @EnvironmentObject :

 let order = Order() // declare it once
let contentView = ContentView().environmentObject(order) // inject to the environment