iOS 编程思想 链式编程思想
iOS 编程思想 链式编程思想
魔笛GNR 发表于2年前
iOS 编程思想 链式编程思想
  • 发表于 2年前
  • 阅读 44
  • 收藏 1
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

摘要: 链式编程思想,通过介绍Masonry第三方约束框架,来介绍链式编程思想,最后我们自己模仿这个思想,写一个计算器。

先看个例子 - Masonry(布局框架)

Masonry简介:Masonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简洁明了 并具有高可读性 而且同时支持 iOS 和 Max OS X。

先来看看Masonry一个使用的小例子:

// ------- Masonry -------

// 创建控件
UIView *redView = [[UIView alloc] init];
redView.backgroundColor = [UIColor redColor];
[self.view addSubview:redView];

// 设置控件的约束
[redView mas_makeConstraints:^(MASConstraintMaker *make) {
    
    // 存放redView设置约束的代码
    make.left.top.equalTo(@10);
    make.right.bottom.equalTo(@-10);
    
}];

Masonry实现原理:

首先,给所有UIView提供一个设置约束的方法makeConstraints

makeConstraints的实现方法:

1.    创建约束制造者,约束制造者提供了很多设置约束的方法,每个制造约束(equalTo)的方法,方法不需要参数,但是必须返回block,每个block需要传入一个参数,计算值。

2.    把约束制造者传入block中,block用于把所有的约束保存到约束制造者中。

然后,执行block。

最后,利用约束制造者给view一次性添加所有约束。

例子中实现的是redView距离屏幕边距 10 。运行效果如下:

实践出真知 - 计算器

我们模仿Masonry,设计一个计算器,仿照它的编程思想,每一个操作都返回一个block:

首先,给所有类提供一个方法makeCaculator。

第二步,创建计算制造者,计算制造者提供很多计算方法(加减乘除),每个计算方法不需要参数,但必须返回block,每个block需要传入一个参数,计算。

第三步,传入block,用于把所有计算保存到计算制造这种,执行block。

最后,把计算制造者算的值,返回出去。

先来看看makeCaculator的实现:

@interface CaculatorMaker : NSObject

@property (nonatomic, assign) int result;

//加法
- (CaculatorMaker *(^)(int))add;
- (CaculatorMaker *(^)(int))sub;
- (CaculatorMaker *(^)(int))muilt;
- (CaculatorMaker *(^)(int))divide;

@end

实现计算制造者:


@implementation CaculatorMaker

- (CaculatorMaker *(^)(int))add{
    
    return ^CaculatorMaker *(int value) {
        
        self.result += value;
        
        return self;
    };
}

- (CaculatorMaker *(^)(int))muilt{
    
    return ^CaculatorMaker *(int value) {
        
        self.result *= value;
        
        return self;
    };
}

- (CaculatorMaker *(^)(int))sub{
    
    return ^CaculatorMaker *(int value) {
        
        self.result -= value;
        
        return self;
    };
}

- (CaculatorMaker *(^)(int))divide{
    
    return ^CaculatorMaker *(int value) {
        
        self.result /= value;
        
        return self;
    };
}

@end

给NSObject添加一个拓展方法( "NSObject+Caculator.h"):

@interface NSObject(Caculator)

//计算
+ (int)makeCaculator:(void(^)(CaculatorMaker * maker))caculatorMaker;

@end

实现方法:

@implementation NSObject(Caculator)

+ (int)makeCaculator:(void (^)(CaculatorMaker *))caculatorMaker{
    
    CaculatorMaker * maker = [[CaculatorMaker alloc]init];
    
    caculatorMaker(maker);
    
    return maker.result;
}

@end

设计好了之后,我们来算一个数学计算题( (1 + 2 + 3 + 4) / 5):

// ------- 计算器 -------
    
//(1 + 2 + 3 + 4) * 5
int result = [NSObject makeCaculator:^(CaculatorMaker *maker) {
       
    maker.add(1).add(2).add(3).add(4).muilt(5);
        
}];
    
NSLog(@"(1 + 2 + 3 + 4) * 5 = %d",result);

结果是 :

至此,我们了解了链式编程思想,小伙伴们快动手试试吧!

Demo地址:

https://github.com/ly918/Demos

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 6
博文 73
码字总数 36902
×
魔笛GNR
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: