ios-链式编程、函数式编程以及响应式编程
2017-11-22 17:41
337 查看
我们如果在完成一件事情的时候,可能会需要有很多步骤,那我们其实就可以把这个步骤看成是一个一个的过程,然后再去组合起来,这样会比较的清晰。就比如说学生要吃饭,读书,跑步我们如果直接去调用方法的话是直接如以下步骤所示去调用的,这就是去实现吃饭,学习,跑步。这里需要注意的是无参数的方法也是可以通过点的形式也就是 . 去调用的。
这个时候我们应该去用block来实现,虽然说免不了调用的方法次数较多,使得整行代码较长,通过换行还能保持一定的阅读性,还是会显的很清晰。
其实Masonry中就很好的用到了链式编程的思想。也就是说方法的返回值是block,block还有返回值
函数式的话其实就是你调用的代码和你处理的业务逻辑在一起的话就是函数式,比如说你有一个方法是有一个block作为参数的,我们在block里面写我们要处理的逻辑代码就是函数式编程。函数式编程的可读性好的原因就是往方法中传入了Block,方法中嵌套Block调用的话,其实就是把代码聚合起来管理。
函数式编程的特点是每个方法必须有返回值(本身对象),把函数或者block当做参数。block可以作为参数也可以作为返回值。
如果是响应式编程的话其实就是和方法的实现有关的,也就是说我们去定义方法的时候只根据某些特定的条件去判断调用那些代码,就比如说AFN中的如果成功的
4000
返回数据调用一个block,如果是失败又调用另外一个block。也就是说在方法的内部实现不知道你代码是如何实现的,只是知道返回什么数据,给你响应你写的代码的执行。
KVO和通知和代理其实都是响应式编程的体现。
补充下只要你有返回值,没有参数就是一个get方法就可以使用点语法。如果方法的返回值是block的,而且也不带参数也可以用点语法
-(void)study { NSLog(@"学习"); } -(void)eat { NSLog(@"吃饭"); } -(void)run { NSLog(@"跑步"); }去调用下面的方法
[student eat]; [student study]; [student run];当然我们还可以这么做也相当于是实现了链式存储,但是这样一直下去会不好去阅读
-(Student *)study { NSLog(@"学习"); return self; } -(Student *)eat { NSLog(@"吃饭"); return self; } -(void)run { NSLog(@"跑步"); }然后去调用
[[[student eat]study]run];
这个时候我们应该去用block来实现,虽然说免不了调用的方法次数较多,使得整行代码较长,通过换行还能保持一定的阅读性,还是会显的很清晰。
-(Student *(^)())study { return ^{ NSLog(@"study"); return self; }; } -(Student *(^)())run { return ^{ NSLog(@"跑步"); return self; }; } -(Student *(^)())eat { return ^{ NSLog(@"吃饭"); return self; }; }我们调用就可以直接通过点语法的方式去调用了,这里的. 其实就相当于是获取这个block,然后()就相当于是去调用
student.eat().study().run();如果我们要携带参数的话需要在block中携带参数,如果直接在函数外面写参数就无法再通过点语法就行调用了,所以我们应该这么写
-(Student *(^)(NSString * string))study { return ^(NSString * string){ NSLog(@"study"); NSLog(@"%@",string); return self; }; }
其实Masonry中就很好的用到了链式编程的思想。也就是说方法的返回值是block,block还有返回值
函数式的话其实就是你调用的代码和你处理的业务逻辑在一起的话就是函数式,比如说你有一个方法是有一个block作为参数的,我们在block里面写我们要处理的逻辑代码就是函数式编程。函数式编程的可读性好的原因就是往方法中传入了Block,方法中嵌套Block调用的话,其实就是把代码聚合起来管理。
函数式编程的特点是每个方法必须有返回值(本身对象),把函数或者block当做参数。block可以作为参数也可以作为返回值。
如果是响应式编程的话其实就是和方法的实现有关的,也就是说我们去定义方法的时候只根据某些特定的条件去判断调用那些代码,就比如说AFN中的如果成功的
4000
返回数据调用一个block,如果是失败又调用另外一个block。也就是说在方法的内部实现不知道你代码是如何实现的,只是知道返回什么数据,给你响应你写的代码的执行。
KVO和通知和代理其实都是响应式编程的体现。
补充下只要你有返回值,没有参数就是一个get方法就可以使用点语法。如果方法的返回值是block的,而且也不带参数也可以用点语法
相关文章推荐
- ReactiveCocoa 函数响应式编程简介 链式编程 函数式编程 响应式编程
- iOS 链式编程与函数式编程
- iOS中函数式编程和链式编程的应用
- 一步一步教你理解和实现iOS中的链式编程和函数式编程
- iOS中的函数式编程和链式编程
- IOS学习之 网络编程(8)--发送json数据给服务器以及多值参数
- 李洪强iOS开发之函数式 编程初窥
- 第四十四篇:iOS使用 runtime 与 响应式编程 KVO 原理
- iOS中的链式编程
- 实现iOS中的链式编程
- 【原】iOS动态性(三) Method Swizzling以及AOP编程:在运行时进行代码注入
- iOS利用block实现链式编程方法(Objective-C链式编程)
- 函数式响应式编程框架ReactiveCocoa总结
- iOS 链式编程思想
- 第四十三篇:iOS链式编程Block
- JS函数式编程【译】4.4 函数式响应式编程
- 链式编程,iOS简单封装属性字符串,实现富文本.
- (转)iOS并发编程笔记,包含GCD,Operation Queues,Run Loops,如何在后台绘制UI,后台I/O处理,最佳安全实践避免互斥锁死锁优先级反转等,以及如何使用GCD监视进程文件文件夹,并发测试的方案等
- IOS学习笔记2-NSThread,链式编程
- 理解iOS与函数式编程