iOS 链式编程思想(仿Masonry写的计算管理类)

2016-08-04  本文已影响176人  imwudi

前言:Masonry这个做约束的第三方框架,想必是大家都用过,一连串的约束在一句话完成,显得十分简洁优美,所以我来使用Masonry的链式编程写思想写一个计算管理类。

链式编程写思想的核心是:写一个用返回类型是本类的block作为返回类型的方法。

读起来有点绕口,下面直接上代码。

Masonry是让所有UIVIEW都能创建约束,所以写了一个UIVIEW的分类,那么我想让所有对象都能计算,所以创建一个NSObject的分类NSObject+Calculate

#import <Foundation/Foundation.h>
@interface NSObject (Calculate)

- (NSInteger)wd_makeCalculate:(void (^)(CalculateManager *))calculateManager;

@end
@implementation NSObject (Calculate)

- (NSInteger)wd_makeCalculate:(void (^)(CalculateManager *))block {
    CalculateManager *calculateManager = [[CalculateManager alloc] init];
    block(calculateManager);
    return calculateManager.result;
}

@end

在分类中的我们使用了计算管理类CalculateManager

#import <Foundation/Foundation.h>

@interface CalculateManager : NSObject

@property (nonatomic,assign) NSInteger result;

- (CalculateManager *(^)(int num))add;

- (CalculateManager *(^)(int num))sub;

- (CalculateManager *(^)(int num))multiple;

- (CalculateManager *(^)(int num))divide;

@end
@implementation CalculateManager

- (CalculateManager *(^)(int num))add {
    return ^(int num){
        _result += num;
        return self;
    };
}

- (CalculateManager *(^)(int num))sub {
    return ^(int num){
        _result -= num;
        return self;
    };
}

- (CalculateManager *(^)(int num))multiple {
    return ^(int num){
        _result *= num;
        return self;
    };
}

- (CalculateManager *(^)(int num))divide {
    return ^(int num){
        _result /= num;
        return self;
    };
}

@end

下面我们就能用他来做计算了

NSInteger result = [NSObject wd_makeCalculate:^(CalculateManager *calculateManager){
        calculateManager.add(3).add(3).sub(2).multiple(3).divide(4);
    }];
    NSLog(@"%zd",result);
result.png
上一篇 下一篇

猜你喜欢

热点阅读