iOS链式函数式响应式编程
2020-12-10 本文已影响0人
crazyfox
iOS链式,函数式,响应式编程
block表达式语法:
^返回值类型(参数列表){表达式}
^int (int count){
return count+1;
};
作为函数参数的语法
-(void)fun:(int (^)(int))block{}
定义block简写
typedef int (^sumBlock) (int);
-(void)fun1:(sumBlock)block{}
作为返回值的语法
-(int(^)(int))fun{
return ^(int count){
return count;
};
}
定义block简写
-(sumBlock)fun2{
return ^(int count){
return count;
};
}
总结
* block作为对象的属性
* block 作为方法的参数
* block作为返回值!!!(扩展性非常强,今天的主角)
链式编程
方法的返回值必须是方法的调用者
链式写法
- (ViewController1 *)test1;
- (ViewController1 *)test1
{
return self;
}
调用:
self.test1;
链式编程带参数的写法:将block作为返回值
- (ViewController1 *(^)(id some))test2;
- (ViewController1 *(^)(id some))test2{
return ^(id some){
return self;
};
}
调用:
self.test2(@"123");
函数式编程
函数式编程思想:是将操作尽可能写在一起!嵌套的函数!!
本质:就是往方法里面传入Block,方法中嵌套Block调用.
- (ViewController1 *)qtest:(NSInteger (^)(NSInteger age))ageBlock;
- (ViewController1 *)qtest:(NSInteger (^)(NSInteger age))ageBlock{
self.age = ageBlock(_age);
return self;
}
调用:
[self qtest:^NSInteger(NSInteger age) {
self.age +=90;
return self.age;
}];
函数+链式编程
若将函数和链式编程结合,我们的程序将会爆发出艺术的火花
典型案例:Masonry界面布局框架
- (ViewController1 *(^)(NSInteger age))btest;
- (ViewController1 *(^)(NSInteger age))btest{
return ^(NSInteger age){
self->_age += 20;
return self;
};
}
调用:
self.btest(20);
小例子(https://github.com/qianbingzhen/QBZTest/tree/master/testChain)
响应式编程
解释:在程序开发中:a = b + c赋值之后 b 或者 c 的值变化后,a 的值不会跟着变化;
响应式编程目标就是,如果 b 或者 c 的数值发生变化,a 的数值会同时发生变化;
响应编程的经典案例:KVO
响应式编程框架:ReactiveCocoa(RAC)
RAC学习可参考SkyHarute 简书博客
作者:iOS技术汇总
链接:https://juejin.cn/post/6844903937514930190
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。