代码改变世界

iOS链式编程范例

2017-11-22 13:07  dengchaojie_learner  阅读(237)  评论(0编辑  收藏  举报

http://www.jianshu.com/p/87ef6720a096

链式编程思想:是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好。a(1).b(2).c(3)

  • 链式编程特点:方法的返回值是block,block必须有返回值(本身对象),block参数(需要操作的值)

  • 代表:masonry框架。

  • 模仿masonry,写一个加法计算器,练习链式编程思想。

链式编程的好处:按照自己的思路,一次性完成各种操作;

例如,先做加法在做除法。

#import <Foundation/Foundation.h>

 

@class CaculatorMaker;

@interface NSObject (Caculator)

// block,形参是CaculatorMaker,无返回值

+ (int)makeCaculators:(void (^)(CaculatorMaker *make))block;

@end

 

#import "NSObject+Caculator.h"

#import "CaculatorMaker.h"

 

@implementation NSObject (Caculator)

 

+ (int)makeCaculators:(void (^)(CaculatorMaker *))block

{

    CaculatorMaker *maker = [[CaculatorMaker alloc] init];

    block(maker);

    return maker.result;

}

 

@interface CaculatorMaker : NSObject

 

@property (nonatomic, assign) int         result;

// 这个add方法,虽然没有明显的形参,但是返回值需要形参,所以在执行add方法时,需要传入一个形参;

// 返回值类型是block,形参是int,返回值是CaculatorMaker

- (CaculatorMaker *(^)(int value))add;

- (CaculatorMaker *(^)(int value))divide;

 

- (instancetype)init

{

    if (self = [super init]) {

        _result = 1;

    }

    return self;

}

- (CaculatorMaker *(^)(int value))add

{

    return (^CaculatorMaker *(int xingCan){

        _result +=  xingCan;

        return self;

    });

}

- (CaculatorMaker *(^)(int))divide

{

    return (^CaculatorMaker *(int xingCan){

        _result /=  xingCan;

        return self;

    });

    

}

@end

 

// 调用

    int result = [NSObject makeCaculators:^(CaculatorMaker *make) {

        make.add(9).divide(2);// 执行add方法,相当于执行相应的block;

    }];

    NSLog(@"%d",result);

// 输出

  5