美文网首页
iOS项目开发MVVM架构实践(第四篇:组件扩展-Reactiv

iOS项目开发MVVM架构实践(第四篇:组件扩展-Reactiv

作者: 看不懂的故事 | 来源:发表于2018-05-13 22:00 被阅读0次

    当我们在项目执行Carthage update获取我们的依赖framework,找到ReactiveCocoa项目文件用xcode打开,我们可以看到它对常用的UI组件做一些扩展,如打开UISearchBar文件:

    UISearchBar.swift

    可以很清楚的看到,协议转换和绑定属性的实现。ReactiveCocoa提供的组件扩展,是不可能满足我们所有的需求,比如:定义组件,第三组件等,如果这些组件也要实现这样的功能,我们应该怎么做呢?

    那就需要我们自己动手来实现了!

    这边,我们介绍三种,1、绑定属性,2、KVO,3、协议转换

    第一:绑定属性,是最简单的,就拿上面UISearchBar来说吧,它的text属性的实现就是了,直接按它的形式依葫芦画瓢就行了。

    第二:KVO,ReactiveCocoa对ios原生的KVO做了一层封装,如:object.reactive.producer(forKeyPath:"#")<最新>,object.reactive.value(forKeyPath:"#")<旧版>,它们既然都有,那么我们干嘛还用封装呢,直接用不就得了嘛?

    说的没错,是可以直接用,但我觉得它还不用简洁友好,所在我们要做进一步的封装,下面我们拿WKWebView的属性扩展来做讲解。

    WKWebView 直接用ReactiveCocoa 用我们封装的

    从上面来,显然我们自己封装的看起来,简洁友好多了,那么要怎么处理呢?

    其实也不难,我们在Reactive上为WKWebView扩展一个属性,另外在ReactiveCocoa的KVO的基础上做一个Map的处理就可以了,如下:

    WKWebView扩展

    第三,协议转换,这个就稍微麻烦一点,需要动手修改ReactiveCocoa的DelegateProxy文件,由于,这个类默认是不提供给外部使用的,所有我们需要把它改为公开的,改为如下:

    DelegateProxy DelegateProxy extension

    准备工作做好了,只用重新build(Carthage build ReactiveCocoa)一下就可以使用了。我们以WKWebView的开始加载、加载完成、加载失败的三个协议方法来做讲解。

    首先,我们继承DelegateProxy写一个WKWebViewDelegateProxy类,如下:

    WKWebViewDelegateProxy类

    接着,我们实现协议转换的工作了,如下:

    WKWebView扩展

    最后,当然就是使用我们工作成果了,如下:

    协议转换的使用

    把组件要实现的协议方法转换为可监听的Signal,是不是感觉优美了很多,嘻嘻!

    三种组件的扩展方式已介绍完毕,希望对使用ReactiveCocoa的开发者有所帮助。

    相关文章

      网友评论

          本文标题:iOS项目开发MVVM架构实践(第四篇:组件扩展-Reactiv

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