美文网首页
Combine 框架,从0到1 —— 4.在 Combine

Combine 框架,从0到1 —— 4.在 Combine

作者: FicowShen | 来源:发表于2020-09-08 07:47 被阅读0次

     

    本文首发于 Ficow Shen's Blog,原文地址: Combine 框架,从0到1 —— 4.在 Combine 中使用通知

     

    内容概览

    • 前言
    • 让通知处理代码使用 Combine
    • 总结

     

    前言

     

    通知中心是苹果开发者常用的功能,很多框架都会使用通知中心来向外部发送异步事件。对于iOS开发人员而言,以下代码一定非常眼熟:

    var notificationToken: NSObjectProtocol?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        notificationToken = NotificationCenter.default
            .addObserver(forName: UIDevice.orientationDidChangeNotification,
                         object: nil,
                         queue: nil) { _ in
                            if UIDevice.current.orientation == .portrait {
                                print ("Orientation changed to portrait.")
                            }
        }
    }
    

    现在,让我们来学习如何使用 Combine 处理通知,并将已有的通知处理代码迁移到 Combine

     

    让通知处理代码使用 Combine

     

    使用通知中心回调和闭包要求您在回调方法或闭包内完成所有工作。通过迁移到 Combine,您可以使用操作符来执行常见的任务,如:filter

    想充分利用 Combine,请使用 NotificationCenter.Publisher 将您的 NSNotification 处理代码迁移到 Combine 习惯用法。您可以使用 NotificationCenter 方法 publisher(for:object:) 创建发布者,并传入您感兴趣的通知名称和可选的源对象。

    var cancellable: Cancellable?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        cancellable = NotificationCenter.default
            .publisher(for: UIDevice.orientationDidChangeNotification)
            .filter() { _ in UIDevice.current.orientation == .portrait }
            .sink() { _ in print ("Orientation changed to portrait.") }
    }
    

    如上面的代码所示,在 Combine 中重写了最上面的代码。此代码使用了默认的通知中心来为orientationDidChangeNotification 通知创建发布者。当代码从该发布者接收到通知时,它使用过滤器操作符 filter(_:) 来实现只处理纵向屏幕通知的需求,然后打印一条消息。

    需要注意的是,orientationDidChangeNotification 通知的 userInfo 字典中不包含新的屏幕方向,因此 filter(_:) 操作符直接查询了 UIDevice

     

    总结

     

    虽然上面的示例无法突显 Combine 的优势,但是我们可以自行想象。使用 Combine 之后,如果需求变得很复杂,我们要做的可能只是增加操作符而已,而且不破坏链式调用代码的易读性。

    朋友,行动起来吧!把现有项目中的旧代码重构成使用 Combine 的代码~

     

    推荐继续阅读:Combine 框架,从0到1 —— 4.在 Combine 中使用计时器

     

    本文内容来源:
    Routing Notifications to Combine Subscribers

     

    相关文章

      网友评论

          本文标题:Combine 框架,从0到1 —— 4.在 Combine

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