美文网首页
iOS 链式编程

iOS 链式编程

作者: insence | 来源:发表于2016-11-03 15:43 被阅读34次

    之前看到 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);
        }];
    

    相关文章

      网友评论

          本文标题:iOS 链式编程

          本文链接:https://www.haomeiwen.com/subject/ozzbuttx.html