Связь SwiftUI между AppDelegate и ContentView()

У меня есть тихое удаленное уведомление, поступающее в приложение SwiftUI. Он не подхватывается UNUserNotificationCenter, а скорее старой функцией AppDelegate didReceiveNotification. Каково решение для уведомления ContentView() о том, что произошло изменение? Наблюдаемый объект в AppDelegate?


person Frederic    schedule 16.05.2020    source источник


Ответы (1)


Вы можете объявить хранилище, которое соответствует ObservableObject в AppDelegate, и установить его как объект среды для ContentView.

// AppDelegate.swift
// in the class
let store = Store()

// in the applicationDidFinishLaunching(_:) method
window.contentView = NSHostingView(rootView: contentView.environmentObject(store))
// ContentView.swift
// in the struct
@EnvironmentObject var store: Store

Объект среды является ссылкой, поэтому вы можете передать в него значение. То же самое с использованием ObservableObject. Когда вы закончите обновление, просто вызовите objectWillChange.send() или отметьте свойство как @Published. И ContentView будет обновлен после уведомления.

person user25917    schedule 16.05.2020