iOS Notification框架之ZRNotify

最近做的一个项目,有些地方准备用通知来处理,但是原生的通知使用方式着实恶心到了我,准备自己写个,结果看到GitHub上有类似的项目,就对源码研究了下,很简洁,但是把通知的使用方式变的更简洁。
GitHub项目地址: https://github.com/ZeroFengLee/ZRNotify

先说说使用这个框架,对于通知的使用方式会有什么改变
以往的通知使用方式:

// 监测通知
NotificationCenter.default.addObserver(self, selector: #selector(acceptNotify), name: NSNotification.Name(rawValue: "NotifyName"), object: nil) 
func acceptNotify(notify: Notification) {    
    print(notify) 
}
// 发送通知
NotificationCenter.default.post(name: Notification.Name(rawValue: "NotifyName"), object: "hello")

使用ZRNotify之后的使用方式:

// 监测通知
ZRNotify().on("NotifyName", notify: { notify in      
    print(notify.object) 
})
// 发送通知
NotificationCenter.default.post(name: Notification.Name(rawValue: "NotifyName"), object: "hello")

从上面的代码可以看出,最大的不同就是在监测通知这部分,而且监测到的通知结果会以block返回,不会让代码太分散。但是这个框架针对多个通知,还有一些高级些的玩法。
一:链式监测,

ZRNotify().on("ScheduleA", notify: { notify in

    print(notify.object)
}).on("ScheduleB", notify: { notify in

    print(notify.object)
})

二:统一监测处理

notify.ons(["ScheduleA", "ScheduleB"], notify: { notify in
        
    print(notify.object)
})

源码解读:

其实源码主要就是为了解决两个问题:
1, 结果回调
2, 链式调用

他使用了一个notifyPool去管理所有的通知,当调用接口on 和 ons的时候,将notifyType对象装载进来。

public typealias notifyType = ((Notification) -> Void)    
fileprivate var notifyPool: [(String, notifyType?)] = []

当有通知被调用的时候, 根据通知名字,去查找notifyType对象,然后开始回调

​func receiveNotify(_ notification: Notification) {    
    for notify in notifyPool {    
        guard notify.0 == notification.name.rawValue else {    
            continue    
        }    
        notify.1?(notification)    
    }    
}

实现代码可能比这个稍微复杂一点。使用这个框架的时候,你能明显感受到对于以往的代码结构还是有很大的提升,有兴趣的可以去看下源码。

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

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,111评论 25 709
  • 行动后,期待有好结果。例如,每天早晚写字,一段时间过后会掂量是不是应该写出像样的文章了,如果没有做到期待中的结果,...
    l筱红阅读 1,553评论 0 0
  • 因为报了班要考试,每个周末都不可能像从前那样想睡到什么时候就什么时候,哪怕我可以晚点起来看书也可以...
    碧甜儿阅读 1,414评论 1 1
  • 标题栏 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 列表 列表1 列表2 列表3 列表4 不一样的...
    peal0924阅读 1,477评论 0 0
  • 家长们在一起,最大的乐趣、最经久不衰的话题没别的,就是比娃! 小时候比孩子的高矮 长大点儿比孩子的学习 再长大,就...
    xxt1946阅读 2,795评论 0 0

友情链接更多精彩内容