zoukankan      html  css  js  c++  java
  • 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 中进行运算了

  • 相关阅读:
    漫谈五种IO模型
    jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)
    Intellij IDEA 插件开发秘籍
    二进制
    java程序员必知的 8大排序
    Redis常见问题
    BitMap位图
    编程思想
    Final修饰的字段是否可以通过反射设置值
    ORACLE 11g ORA-20000: Unable to analyze TABLE "AA"."CMP3$87651", insufficient privileges or does not exist
  • 原文地址:https://www.cnblogs.com/ZachRobin/p/9794192.html
Copyright © 2011-2022 走看看