ReSwift是JavaScript中Redux的swift版本,看到它的时候,我就想到了,我以前项目中无处安放的个人资料信息,全局设置状态信息的最好去处。
根据Redux的概念,项目中有一个唯一的Store,通过调度Action,更新state,通过监听state来处理事情。这种机制在一下小型的项目中或许可以用的很爽,但是在一些稍微中型或者大型的项目中,用Redux就显得不足。
比如,我一个界面只能监听一种state,如果想要监听两种state就需要监听两种state的共同持有者。这样的事情做得做了,界面多了 刷新频率可想而知。
而且一个界面想要监听State,如果在ViewDidLoad里面监听,那界面本身会被State里面的属性持有,如果在界面将要显示的时候监听,界面将要出现的时候取消监听,每次界面显示的时候都会因为监听,刷新一遍newState方法。
不过这些顾虑当我想到RxSwift时,就都没了顾虑。完全可以把监听state这个动作封装成信号,然后由DisposeBag管理生命周期。代码不多 只有几十行

这样转换思路后,就可以实现对整个state中,任意一个或者多个state进行监听处理。

当然,介于ReSwift的全局性,还是不太建议把界面相关状态的控制放进去,一些全局的状态,还是可以放的。
响应式编程用的越多,越能感觉出他的魅力。
当网络请求遇上它,我可以随意对网络请求进行超时,重新请求,错误处理,插入请求各种操作。
当Event,遇上它,我可以对点击事件进行防多点处理,值变化处理,出错时震动等等操作。
类似的还有手势,数据库,列表刷新等等,很多东西一旦用信号的方式来思考,处理起来就是这么得心应手。
网友评论