RAC中的链式调用和函数式编程


声明:本文转载自https://my.oschina.net/u/3729363/blog/1584233,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

RAC全程ReactiveCocoa,是由Github开源的一个应用于iOS和OS开发的新框架。RAC结合了函数式编程(Functional Programming)和响应式编程(Reactive Programming),其中的函数式编程一直比较难以理解,最近在使用链式调用的过程当中,才获得进一步理解。

链式调用

链式调用的一个特点就是返回值为一个 block,block 其实是一个匿名函数,定义方法如下:

returnType (^blockName)(parameterTypes) 

有参数,有返回值,可以用 blockName() 执行这个 block,当然需要传入定义好的参数。

block 可以作为一个方法的参数或者返回值,链式调用中,定义的方法返回值为一个 block,这个block的类型为

returenType (^)(parameterType) 

如下方中的 readBook 方法,返回值为一个 HMPerson * (^)(NSString *) 类型的block

- (HMPerson * (^)(NSString *bookName))readBook {     return ^ id (NSString *bookName) {         NSLog(@"I read a book named %@",bookName);         return self;     }; };  - (HMPerson * (^)(NSString *))drink {     return ^ id (NSString *drink) {         NSLog(@"I drink %@", drink);         return self;     }; }; 

调用方法如下

    HMPerson *wyMan = [[HMPerson alloc] init];     wyMan.readBook(@"River town").drink(@"Cola"); 

当 readBook 方法被调用时,实际上是获取到了一个 HMPerson * (^)(NSString *) 类型的 block,block 的调用方式就是括号里加参数,那么 person.readBook(@"River town") 就完成了 readBook 方法的调用,由于这个 block 返回了一个 HMPerson 实例,我们可以用这个实例接着做其他事,这样的调用像一条链子一样,一口气做完一个对象想做的所有事都可以。

RAC 中的函数式编程

在链式调用的方法中,我们看到可以将一个 block 作为一个返回值的形式,在需要的地方获取到这个 block 并执行它,block 中定义了所需要做的操作,那么可不可以把 block 当作参数,定义特定类型的 block,比如一个 ^id(id value) 类型的 block,只需要这个 block 最终的返回值,至于这个 block 中对于这个 value做了什么操作并不关心,相当于一个工厂,只提供原料,至于中间的工序如何不关心,只关心最终得到一个产品就好了。

我们在使用 RAC 框架时经常会用到这一样个方法:

    [[ClassA doSomething] map:^id(id value) {          }]; 

doSomething 方法返回值为一个 RACSignal,一个信号可以调用 map 方法,将这个信号中的 value 拿出来,并要求一个返回值,这个值可以根据 value 计算得到,至于怎么计算,可以根据业务定制,经过计算得到的值作为返回值返回,map 中会根据这个返回值生产一个新的信号。总结的来说,就是抽象出来需要做什么 (block 中的逻辑)。

这就是我现在理解的一点函数式编程的应用吧,函数(block) 作为一个参数存在,方法中可以根据这个拿到这个参数并执行,以得到返回值。

理解比较浅,有错误的地方还望指正。

在查找资料的过程中读到阮一峰老师的函数式编程的文章,传送门 对照一下 RAC 框架中并不止有点体现了函数式编程的思想,不过还不是太懂,还在琢磨当中。

参考资料

本文发表于2017年12月04日 08:38
(c)注:本文转载自https://my.oschina.net/u/3729363/blog/1584233,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 2058 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1