AppDelegate 和 ContentView() 之间的 SwiftUI 通信

Posted

技术标签:

【中文标题】AppDelegate 和 ContentView() 之间的 SwiftUI 通信【英文标题】:SwiftUI communication between AppDelegate and ContentView() 【发布时间】:2020-05-16 05:01:15 【问题描述】:

我在 SwiftUI 应用程序上收到了一个静默远程通知。它不是由 UNUserNotificationCenter 拾取的,而是由旧的 AppDelegate didReceiveNotification 函数拾取的。通知 ContentView() 发生更改的解决方案是什么? AppDelegate 中的 ObservableObject?

【问题讨论】:

【参考方案1】:

您可以在 AppDelegate 中声明一个符合 ObservableObject 的商店,并将其设置为 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 将在通知后更新。

【讨论】:

以上是关于AppDelegate 和 ContentView() 之间的 SwiftUI 通信的主要内容,如果未能解决你的问题,请参考以下文章

Swiftui: MacOS App: Fetching Core Data in ContentView OK,但是如何使用 AppDelegate 的结果呢?

如何确认 AppDelegate 的 ObservableObject?

Swift UI - 如何从外部访问 @State 变量?

防止子视图上的 UITapGestureRecognizer

UIScrollView 和 Autolayout 防止 contentview 压缩

在 ScrollView 的 ContentView 中拉伸 UIView