译自 www.hackingwithswift.com/books/ios-s…
更多内容,欢迎关注公众号 「Swift花园」
喜欢文章?不如来个 🔺💛➕三连?关注专栏,关注我 🚀🚀🚀
SwiftUI 应用处于后台时如何获得通知
SwiftUI 可以检测到你的应用进入后台的时刻(比如,用户回到主屏),应用回到前台的时刻,用户截屏的时刻,等等。这些都是由 Notification Center 驱动的,它是 Apple 的内部消息系统 —— 一组让系统在事件发生时通知我们的 API,同时也允许我们在代码的不同部分之间传递消息。
Notification Center 也来自 Apple 的 Foundation 框架,在 SwiftUI 中我们可以使用 Combine 来监听来自它的事件。所以说,实际上三个框架协同工作,为我们提供了强大的功能。
例如,Notification Center 会在你的应用进入后台时发送 UIApplication.willResignActiveNotification
消息,这使得我们有机会暂停任何非关键的工作,保存数据,等等。为了使用它,我们需要让 Notification Center 为通知创建一个发布者,然后添加我们要执行的工作。当消息产生时,它会被作为实际的参数传给我们的闭包,不过多数情况下你可以忽略它。
尝试下面的代码,在用户离开应用时打开消息:
Text("Hello, World!")
.onReceive(NotificationCenter.default.publisher(for: UIApplication.willResignActiveNotification)) { _ in
print("进入后台!")
}
有许多可以监听的消息,工作方式都一样。例如,跟 willResignActiveNotification
相反的是 willEnterForegroundNotification
,它会在用户重新激活你的应用时被发送。在这里你可以继续重要的工作:
Text("Hello, World!")
.onReceive(NotificationCenter.default.publisher(for: UIApplication.willEnterForegroundNotification)) { _ in
print("进入前台!")
}
你还可以用 userDidTakeScreenshotNotification
来监听用户做了截屏动作:
Text("Hello, World!")
.onReceive(NotificationCenter.default.publisher(for: UIApplication.userDidTakeScreenshotNotification)) { _ in
print("用户截屏!")
}
由于数量众多,恕我不一一列举,这里再举两个例子就好:
- 当用户修改时钟或者夏时令变更时,
UIApplication.significantTimeChangeNotification
消息会被发送 - 键盘显示时会发送
UIResponder.keyboardDidShowNotification
所有这些通知的工作方式都是相同的:用 onReceive()
从发布者那里捕获消息,然后执行任何你想要做的动作。
我的公众号 这里有Swift及计算机编程的相关文章,以及优秀国外文章翻译,欢迎关注~