zoukankan      html  css  js  c++  java
  • iOS链式编程范例

    http://www.jianshu.com/p/87ef6720a096

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

    • 链式编程特点:方法的返回值是block,block必须有返回值(本身对象),block参数(需要操作的值)

    • 代表:masonry框架。

    • 模仿masonry,写一个加法计算器,练习链式编程思想。

    链式编程的好处:按照自己的思路,一次性完成各种操作;

    例如,先做加法在做除法。

    #import <Foundation/Foundation.h>

     

    @class CaculatorMaker;

    @interface NSObject (Caculator)

    // block,形参是CaculatorMaker,无返回值

    + (int)makeCaculators:(void (^)(CaculatorMaker *make))block;

    @end

     

    #import "NSObject+Caculator.h"

    #import "CaculatorMaker.h"

     

    @implementation NSObject (Caculator)

     

    + (int)makeCaculators:(void (^)(CaculatorMaker *))block

    {

        CaculatorMaker *maker = [[CaculatorMaker alloc] init];

        block(maker);

        return maker.result;

    }

     

    @interface CaculatorMaker : NSObject

     

    @property (nonatomic, assign) int         result;

    // 这个add方法,虽然没有明显的形参,但是返回值需要形参,所以在执行add方法时,需要传入一个形参;

    // 返回值类型是block,形参是int,返回值是CaculatorMaker

    - (CaculatorMaker *(^)(int value))add;

    - (CaculatorMaker *(^)(int value))divide;

     

    - (instancetype)init

    {

        if (self = [super init]) {

            _result = 1;

        }

        return self;

    }

    - (CaculatorMaker *(^)(int value))add

    {

        return (^CaculatorMaker *(int xingCan){

            _result +=  xingCan;

            return self;

        });

    }

    - (CaculatorMaker *(^)(int))divide

    {

        return (^CaculatorMaker *(int xingCan){

            _result /=  xingCan;

            return self;

        });

        

    }

    @end

     

    // 调用

        int result = [NSObject makeCaculators:^(CaculatorMaker *make) {

            make.add(9).divide(2);// 执行add方法,相当于执行相应的block;

        }];

        NSLog(@"%d",result);

    // 输出

      5

     

  • 相关阅读:
    JS-字符串截取方法slice、substring、substr的区别
    Vue中computed和watch的区别
    Vue响应式原理及总结
    JS实现深浅拷贝
    JS中new操作符源码实现
    点击页面出现爱心效果
    js判断对象是否为空对象的几种方法
    深入浅出js实现继承的7种方式
    es6-class
    详解 ESLint 规则,规范你的代码
  • 原文地址:https://www.cnblogs.com/dengchaojie/p/7878669.html
Copyright © 2011-2022 走看看