iOS block=链式编程的简单实现 帮助理解篇

@interface CaculateMarker :NSObject

@property(nonatomic,assign) NSInteger count;

@property(nonatomic,copy) CaculateMarker*(^plus)(NSInteger num);

- (CaculateMarker* (^)(NSInteger num))add;

@end


@implementation CaculateMarker

- (CaculateMarker*(^)(NSInteger num))add{

      return^(NSInteger num){

            self.count+=num;  

            return self;

      };

}

- (CaculateMarker*(^)(NSInteger num))plus{

      return^(NSInteger num){

            self.count+=num;

            return self;

      };

}

@end

这里要实现的是类似于 caculateMarker.add(num).add(num2).add(num3)...的运算调用。

链式编程利用了get方法或者说懒加载,不过这次我们懒加载的是block

下面是写的两个block,一个plus一个是add 没错,其实他们实现的都是加法运算,而下面的写法更简洁清晰。

@property(nonatomic,copy)CaculateMarker*(^plus)(NSInteger num);

- (CaculateMarker* (^)(NSInteger num))add;

分析下:

caculateMarker.add(num).

1.caculateMarker.add   这里就是懒加载来获取add or plus这个block,然后我们在以下的.m中实现get方法,返回一个block,这个block包含了加法运算逻辑,然后把这个block返回。

- (CaculateMarker*(^)(NSInteger num))plus{

      return^(NSInteger num){

            self.count+=num;

            return self;

      };

}

那么caculateMarker.add(num). 实际上是 addBlock = ^(NSInteger num){...};

替换下就是addBlock(num),这样我们的链式基本就完成了,这样拆解开的话应该蛮好理解的了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容