iOS 链式编程

之前看到 Masonry 是使用链式编程,感觉很酷,自己简单的写了一个链式编程的示例!

首先简单的来说一下链式编程思想。
链式编程思想:把想要的操作封装到block,然后给外界提供一个返回这个Block的方法。
链式编程思想的特点:方法返回值必须是block,block参数里:放需要操作的内容,block返回值是:方法调用者。

1.首先我创建了一个类 :(BYJCaculatorMaker)

#import <Foundation/Foundation.h>
@class BYJCaculatorMaker;

typedef BYJCaculatorMaker *(^caculatorBlock)(int num);

@interface BYJCaculatorMaker : NSObject

@property (nonatomic, assign) int result;

#pragma mark - 加法
- (caculatorBlock)add;

#pragma mark - 减法
- (caculatorBlock)subtract;

#pragma mark - 乘法
- (caculatorBlock)multiply;

#pragma mark - 除法
- (caculatorBlock)divide;

@end

#import "BYJCaculatorMaker.h"

@implementation BYJCaculatorMaker

#pragma mark - 加法
- (caculatorBlock)add {
    
    return ^(int num){
        
        _result += num;
        
        return self;
    };
}

#pragma mark - 减法
- (caculatorBlock)subtract {
    
    return ^(int num) {
        
        _result -= num;
        
        return self;
    };
}

#pragma mark - 乘法
- (caculatorBlock)multiply {
    
    return ^(int num){
        
        _result *= num;
        
        return self;
    };
}

#pragma mark - 除法
- (caculatorBlock)divide {
    
    return ^(int num) {
        
        _result /= num;
        
        return self;
    };
}

@end

2.我创建了一个分类:(NSObject+Caculator), 创建分类也是为了让自己的代码高聚合。只要是NSObject类都可以调用我的方法。

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

typedef void(^makerBlock)(BYJCaculatorMaker *maker);

@interface NSObject (Caculator)

// 以后计算都使用这个方法,一调用这个方法就返回结果.
+ (int)makeCaculator:(makerBlock)block;

@end
#import "NSObject+Caculator.h"

@implementation NSObject (Caculator)

+ (int)makeCaculator:(makerBlock)block {
    
    // 创建计算
    BYJCaculatorMaker *maker = [[BYJCaculatorMaker alloc] init];
    // 计算
    block(maker);
    
    return maker.result;
}

@end

// 只需在block内调用,即可获取结果
    int result = [NSString makeCaculator:^(BYJCaculatorMaker *maker) {
       
        maker.add(10).multiply(10).subtract(50).divide(5);
    }];
    
    NSLog(@"%d", result);
// 高聚合性
    [NSString makeCaculator:^(BYJCaculatorMaker *maker) {
        maker.subtract(100).divide(5).add(10).multiply(9);
    }];
    [UIView makeCaculator:^(BYJCaculatorMaker *maker) {
        maker.subtract(100).divide(5).add(10).multiply(9);
    }];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容