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

     

  • 相关阅读:
    git rebase学习
    git rebase 通俗易懂!
    fatal: Refusing to fetch into current branch refs/heads/ReqMerge_26 of non-bare repository
    跨越千年的RSA算法
    CodeForces 734E-Anton and Tree(并查集缩点+树的直径)
    程序员的笑话
    智慧煤矿:新基建加速智能化布局,AI助力煤炭产业转型升级
    EasyScreenLive推流组件推RTSP流到EasyDarwin操作过程分享
    EasyCVRpython调接口报错cannot unmarshal array into Go value of type main
    使用ninja -C out/Release指令编译安卓Webrtc的SDK报错找不到android ndk处理方式
  • 原文地址:https://www.cnblogs.com/dengchaojie/p/7878669.html
Copyright © 2011-2022 走看看