简单的链式编程demo

#import <Foundation/Foundation.h>
#import "CalculateManager.h"

@interface NSObject (Calculate)
/*
 方法设计:自己框架,最好添加一个方法前缀
 */

// 把所有的计算代码放在这里--  聚合代码
+ (int)www_makeCalculate:(void(^)(CalculateManager *manager))block;
@end
#import "NSObject+Calculate.h"

@implementation NSObject (Calculate)
+ (int)www_makeCalculate:(void (^)(CalculateManager *manager))block {
    NSLog(@"%s",__func__);
    CalculateManager *mgr = [[CalculateManager alloc] init];
    block(mgr);
    return mgr.result;
}
@end

#import "CalculateManager.h"

@implementation CalculateManager
- (CalculateManager *(^)(int value))add {
    NSLog(@"%s",__func__);
    __weak typeof(self) weakSelf = self;

    return ^(int value2){
        NSLog(@"value2---%s",__func__);
        weakSelf.result += value2;
        return weakSelf;
    };
}
@end

#import "ViewController.h"
#import "NSObject+Calculate.h"

@interface ViewController ()

@end

@implementation ViewController
/**
 *  +[NSObject(Calculate) www_makeCalculate:]
 *  [ViewController viewDidLoad]_block_invoke
 *  -[CalculateManager add]
 *  [CalculateManager add]_block_invoke
 *  执行顺序--
    1.www_makeCalculate方法执行后去调用 ViewController中写入该方法中的block
    2.执行www_makeCalculate方法的block
    3.调用add方法(实际就是调用add方法中return的block,该block的传参在ViewController中传值)
    4.执行add方法中的block
 */

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    int result = [NSObject www_makeCalculate:^(CalculateManager *manager) {
        NSLog(@"%s",__func__);
        manager.add(5);
    }];
    NSLog(@"%i",result);
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容