对于常规调试,我认为找出NotificationCenter发布的所有通知并将其打印到控制台会非常有用。我找不到关于这方面的帖子,所以我想分享一下我是如何做到这一点的。
@main
struct MyApp: App {
let notes = NotificationObserver()
var body: some Scene {
WindowGroup {
Text("Hello, world!")
}
}
}
class NotificationObserver {
init() {
NotificationCenter.default.addObserver(
self,
selector: #selector(printAllNotifications),
name: nil,
object: nil)
}
@objc func printAllNotifications(_ note: Notification) {
guard note.name != UIScreen.brightnessDidChangeNotification else { return }
print(note.name)
}
}
从本质上讲,addObserver(_:selector:name:object:)
的名称参数是optional
,传递nil作为参数意味着观察到所有通知。
我们提供给选择器参数的函数需要在运行时访问Objective-C
,所以我们用@objc
标记它。由于@objc
只能与类的成员一起使用,我们将此代码封装在NotificationObserver类中。
现在,我们所需要做的就是在应用程序的入口点创建一个NotificationObserver
的实例,并将所有通知打印到控制台(在这里,我们排除了brightnessDidChangeNotification
,因为这似乎会污染控制台,并且可能不是您在使用时想要的(。