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

来源:掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

上一篇下一篇

猜你喜欢

热点阅读