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