iOS的函数响应型编程

教程说明:


译者寄语


自从Github团队2013年开源出ReactiveCocoa这个著名的第三方库之后,各方反应强烈,AFNetworking的作者Mattt Thompson更是高呼这是一场革命,译者kevinHM一直都很关注业内最新的技术动态及各种技术信息,这个框架出来之后也找了些资料研究,但都比较浅,译者表示自己没有研究好这部分内容也不敢贸然在商业级App里尝试,而微博上、QQ群里各种社交媒体上,你总能听到程序员们偶然会讨论MVVM与RAC等,没有多的书面资 料可以参考,当看到Ash Furrow的 FunctionalReactiveProgrammingOniOS 时,译者觉得这本书介绍ReactiveCocoa时比起其他我能找到的资料来说算是较好的了(他本人开源的项目” FunctionalReactivePixels”意义一样大),就想着把他翻译出来给大家参考,同时自己也能从中学习。

所以这本书的目的就是为了普及ReactiveCocoa,让更多的开发者能够接受ReactiveCocoa这种方式,让大家更优雅地在iOS中实现MVVM架构。

ReactiveCocoa简介


ReactiveCocoa(简称为RAC),RAC 是一个 iOS 中的函数式响应式编程框架,是Github 在开发 GitHub for Mac 过程中的一个副产品。Cocoa是苹果整套框架的简称,因此很多苹果框架喜欢以Cocoa结尾。RAC提供了一系列用来组合和转换值流的 API,为事件的处理定义了一个标准接口,大大方便了开发者去管理各种事件的处理,结果就是开发者能从关注业务实现的细节上脱身,转变为开发者只需要关心业务本身就好了

ReactiveCocoa的作用

  • 在我们iOS开发过程中,当某些事件响应的时候,需要处理某些业务逻辑,这些事件都用不同的方式来处理。
  • 比如按钮的点击使用action,ScrollView滚动使用delegate,属性值改变使用KVO等系统提供的方式。
  • 其实这些事件,都可以通过RAC处理
  • ReactiveCocoa为事件提供了很多处理方法,而且利用RAC处理事件很方便,可以把要处理的事情,和监听的事情的代码放在一起,这样非常方便我们管理,就不需要跳到对应的方法里。非常符合我们开发中高聚合,低耦合的思想。

ReactiveCocoa编程思想


ReactiveCocoa结合了几种编程风格:

函数式编程(Functional Programming):使用高阶函数,例如函数用其他函数作为参数。


响应式编程(Reactive Programming):关注于数据流和变化传播。

所以,你可能听说过ReactiveCocoa被描述为函数响应式编程(FRP)框架。

以后使用RAC解决问题,就不需要考虑调用顺序,直接考虑结果,把每一次操作都写成一系列嵌套的方法中,使代码高聚合,方便管理。

在线阅读


W3Cschool https://www.w3cschool.cn/ios_functional_reactive_program

版权信息


本书译者为: kevinHM 翻译自 https://leanpub.com/iosfrp

经由译者授权转载至W3Cschool.cn


温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }