为什么有些 Notifications.userInfo 是零?

Why some Notifications.userInfo is nil?

一个例子: 为什么这个通知“didActivateApplicationNotification”

NSWorkspace.shared.notificationCenter.addObserver(self,
                    selector: #selector(updateOnFocus(notification:)),
                    name: NSWorkspace.didActivateApplicationNotification,
                    object:nil)

通过通知传递用户信息字典 -> 下面的代码 = 返回通知

NSConcreteNotification 0x60000191e3d0 {name = NSWorkspaceDidActivateApplicationNotification; object = <NSWorkspace: 0x6000015443d0>; userInfo = {
    NSWorkspaceApplicationKey = "<NSRunningApplication: 0x60000394a800 (com.apple.ActivityMonitor - 6940) LSASN:{hi=0x0;lo=0x2aa2aa}>";
}}

这个通知“activeSpaceDidChangeNotification”

NSWorkspace.shared.notificationCenter.addObserver(self,
                   selector: #selector(updateOnSpaceChange(notification:)),
                   name: NSWorkspace.activeSpaceDidChangeNotification,
                   object: nil)

不通过通知传递用户信息字典吗? -> 下面的代码 = 返回通知

NSConcreteNotification 0x60000191e160 {name = NSWorkspaceActiveSpaceDidChangeNotification; object = <NSWorkspace: 0x6000015443d0>}

我怎样才能padronize这个通知?

没有“为什么”,不,你无法改变这一点。这些通知来自运行时。某些类型的通知在 userInfo 中带有额外信息,其他类型的通知则没有。它的工作方式就是它的工作方式。结束。

这一切都得到了很好的记录。 didActivate documentation 表示:

The notification object is the shared NSWorkspace instance. The userInfo dictionary contains the applicationUserInfoKey key with a corresponding instance of NSRunningApplication that represents the affected app.

这是您的用户信息。但是 activeSpace documentation 说:

The notification doesn’t contain a userInfo dictionary.

给你。