链式编程思想:
是将多个操作通过点号(.)链接在一起成为一句代码,使代码可读性好。
链式编程的特点:方法的返回值是block,block必须有返回值(对象本身),block里可以有参数(需要操作的值)。方法的返回值必须是方法的调用者。
代表作: masonry框架
// 核心功能
//.h
@interface sumManager : NSObject
//计算结果
@property(assign,nonatomic)int result;
// 返回对象本身,可以连续调用本对象里边的方法
-(sumManager * (^)(int value))add;
@end
//.m
-(sumManager *(^)(int value))add
{
return ^(int value){
_result += value;
return self;
};
}
// 写一个NSObject的分类,方便调用
@implementation NSObject (sum)
+(int)makeConstraints:(void(^)(sumManager *))blocker
{
sumManager *mgr = [[sumManager alloc]init];
blocker(mgr);
return mgr.result;
}
// VC 里边调用
int result = [NSString makeConstraints:^(sumManager * mgr) {
mgr.add(100).add(100).add(200);
}];
NSLog(@"%d",result);
函数式编程:
将操作尽可能写在一起的嵌套函数
本质:就是往方法里边传入block,方法中嵌套Block的调用。
// 计算核心
@implementation SumManager
-(instancetype)manager:(int (^)(int))sumBlock
{
_result = sumBlock(_result);
return self;
}
@end
// 调用
SumManager *mgr = [[SumManager alloc]init];
int result = [[mgr manager:^int(int result) {
result += 10;
result *= 2;
return result;
}]result];
NSLog(@"%d",result);
响应式编程
是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。
例如,在命令式编程环境中,a:=b+c表示将表达式的结果赋给a,而之后改变b或c的值不会影响a。但在响应式编程中,a的值会随着b或c的更新而更新。电子表格程序就是响应式编程的一个例子。单元格可以包含字面值或类似"=B1+C1"的公式,而包含公式的单元格的值会依据其他单元格的值的变化而变化。
响应式编程最初是为了简化交互式用户界面的创建和实时系统动画的绘制而提出来的一种方法,但它本质上是一种通用的编程范式。
一版依赖 RAC、KVO、Notification 等实现