美文网首页
Notification

Notification

作者: meowboss | 来源:发表于2017-08-21 00:50 被阅读7次

    简介:

    关于Swift的Notification网上已经很很多资料了,下面要介绍的方式是基于枚举和命名空间的方式实现的。

    实现:

    enum ZYNotification: String {
        case userLogin
        case userLogout
    }
    extension ZYNotification {
        var stringValue: String {
            return "ZY" + rawValue
        }
        var notificationName: NSNotification.Name {
            return NSNotification.Name(stringValue)
        }
    }
    

    首先定义了一个枚举,接着在extension中定义了一个类型是NSNotification.Name的计算属性,后续我们会在通知中用到这个属性。

    extension NotificationCenter: ZYCompatible{}
    
    extension ZY where Base: NotificationCenter {
        func post(name aName: ZYNotification, object anObject: Any? = nil, userInfo aUserInfo: [AnyHashable : Any]? = nil) {
            base.post(name: aName.notificationName, object: anObject, userInfo: aUserInfo)
        }
        
        func addObserver(_ observer: Any, selector aSelector: Selector, name aName: ZYNotification, object anObject: Any? = nil) {
            base.addObserver(observer, selector: aSelector, name: aName.notificationName, object: anObject)
        }
        
    func removeObserver(_ observer: Any, name aName: ZYNotification, object anObject: Any? = nil) {
            base.removeObserver(observer, name: aName.notificationName, object: anObject)
        }
    }
    

    首先给NotificationCenter添加命名空间,关于命名空间介绍可以看我这里的文章,接着“重写”NotificationCenter的实例方法,就可以像调用系统原生的方法那样调用我们自己实现的方式了。

    示例:

     NotificationCenter.default.zy.addObserver(self, selector: #selector(userLogin), name: .userLogin)
    

    查考资料:

    Kingfisher
    Swift中Notification.Name这么难用怎么办

    相关文章

      网友评论

          本文标题:Notification

          本文链接:https://www.haomeiwen.com/subject/tlbqdxtx.html