小知识点好东西

对Notification.Name的正确姿势

2017-08-06  本文已影响87人  大兵布莱恩特

自从 Swift3.0以来作者一直使用 String 来替代Notification.Name,简化了代码也回到了大家以往对于 Notification 的认识.

func  NotificationName(name : String) -> Notification.Name {
        return Notification.Name(name)
 }

使用时这样调用 
 NotificationCenter.default.addObserver(forName: NotificationName(name), object: obj, queue: queue, using: block)

通过上边的函数可以根据传入的 String 返回一个 Notification.Name类型,虽然在一定程度上简化了代码,但是觉得还是不够优雅,于是有了下边的改进.

对你没有看错采用面向协议的方式对 Notification.Name 进行了拓展

typealias NotificationName = Notification.Name
extension NotificationName : ExpressibleByStringLiteral {
    public typealias StringLiteralType = String
    public init(stringLiteral value: StringLiteralType) {
        self = Notification.Name.init(value)
    }
}

这样也可以通过一个 String 快速生成一个 Notification.Name 类型,而且在使用时不需要对 NotificationCenter 提供的函数进行任何的修改 ,你可以选择使用 Notification.Name 和 String 类型进行函数的调用

 NotificationCenter.default.post(name: NSNotification.Name("Login"), object: nil)

 NotificationCenter.default.post(name: "Login", object: nil)

上一篇下一篇

猜你喜欢

热点阅读