• iOS 开发之使用链式编程思想实现简单的计算器


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

      链式编程思想最为关键的是,方法的返回值是block,block必须返回对象本身(返回block时,block所在的方法调用者对象)block的参数是需要操作的值。;

      在iOS开发中,使用链式编程思想最好的代表是 Masonry 自动约束布局:

      例如:

    [itemButton mas_makeConstraints:^(MASConstraintMaker *make) {
                    make.left.equalTo(contentView.mas_left).offset(15 + (itemWidth+15)*i);
                    make.top.equalTo(contentView.mas_top).offset(255);
                    make.width.height.equalTo(@(itemWidth));
                }];

      执行流程为:

    /**
            mas_makeConstraints执行流程:
            1.创建约束制造者MASConstraintMaker,并且绑定控件,生成一个保存所有约束的数组
            2.执行mas_makeConstraints传入的Block
            3.让约束制造者安装约束!
                * 1.清空之前的所有约束
                * 2.遍历约束数组,一个一个安装
       */

      可以看出,使用链式编程,代码可读性较好。

      仿照 Masnory 使用链式编程思想写个运算器:

    #import <Foundation/Foundation.h>
    
    @interface CalculateManager : NSObject
    
    @property (nonatomic, assign) int result;
    
    
    - (CalculateManager *(^)(int value))add;
    
    - (CalculateManager *(^)(int value))minus;
    
    - (CalculateManager *(^)(int value))multiply;
    
    - (CalculateManager *(^)(int value))devite;
    
    
    @end
    

      

    #import "CalculateManager.h"
    
    @implementation CalculateManager
    
    - (CalculateManager *(^)(int))add {
        return ^(int value) {
            _result += value;
            return self;
        };
    }
    
    - (CalculateManager *(^)(int))minus {
        return ^(int value) {
            _result -= value;
            return self;
        };
    }
    
    - (CalculateManager *(^)(int))multiply {
        return ^(int value) {
            _result *= value;
            return self;
        };
    }
    
    - (CalculateManager *(^)(int))devite {
        return ^(int value) {
            _result /= value;
            return self;
        };
    }
    
    @end

      

    #import "NSObject+Calculate.h"
    
    #import "CalculateManager.h"
    
    @implementation NSObject (Calculate)
    
    + (int)ztb_calculateValue:(void(^)(CalculateManager *make))block
    {
        CalculateManager *manager = [[CalculateManager alloc] init];
        block(manager);
        return manager.result;
    }
    
    @end

      在使用时:

    int result = [NSString ztb_calculateValue:^(CalculateManager *make) {
            make.add(19).multiply(10).devite(5).minus(5).add(8);
        }];

      可以在 Block 中进行运算了

  • 相关阅读:
    1654. Minimum Jumps to Reach Home
    1129. Shortest Path with Alternating Colors
    1766. Tree of Coprimes
    1368. Minimum Cost to Make at Least One Valid Path in a Grid
    LeetCode 841 钥匙与房间
    LeetCode 268 缺失数字
    LeetCode 136 只出现一次的数字
    LeetCode 461 汉明距离
    LeetCode 557 反转字符串中的单词 III
    LeetCode 392 判断子序列
  • 原文地址:https://www.cnblogs.com/ZachRobin/p/9794192.html
Copyright © 2020-2023  润新知