对Notification.Name的正确姿势

自从 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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容