前面
初学 Swift 中相关 NSNotification 的代码时, 发现了之前熟悉的 name 参数的类型由 Objective-C 中的 NSString 变成了 Notification.Name 类型. 并不是我期望的 String 类型...这是怎么回事呢?
Swift 中如何使用 Notification
那么, 在 Swift 中如何使用 Notification 呢, 以 post 为例.
NotificationCenter.default.post(name: Notification.Name.UIApplicationDidFinishLaunching, object: nil)
其中, Notification.Name 是可以省略的, 就变为了
NotificationCenter.default.post(name: .UIApplicationDidFinishLaunching, object: nil)
查看定义发现了 UIApplicationDidFinishLaunching 实际上是定义在结构体 NSNotification.Name 扩展(extension)中的的一个静态常量 (static let), 类型是 NSNotification.Name
extension NSNotification.Name {
@available(iOS 4.0, *)
public static let UIApplicationDidEnterBackground: NSNotification.Name
@available(iOS 4.0, *)
public static let UIApplicationWillEnterForeground: NSNotification.Name
public static let UIApplicationDidFinishLaunching: NSNotification.Name
...
}
复制代码所以我们才可以省略前面的 Notification.Name 直接使用 .UIApplicationDidFinishLaunching (Notification.Name 是 NSNotification.Name 的别名)
那我们如果想自定义一个通知怎么办呢, 直接可以仿照系统的方式, 我们自己为其增加一个 extension
extension Notification.Name {
static let LoginStatusChanged = Notification.Name("LoginStatusChanged")
}
其中 Notification.Name("LoginStatusChanged") 是其初始化方法, 可查看文档说明, 使用时, 可直接








