简介:
关于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)
网友评论