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 工厂模式、简单模式、抽象模式
    Angular 框架介绍
    Node.js从入门到实战ECMAScript6一页纸总结(很大的一页纸)
    ECMAScript 5和ECMAScript6的新特性以及浏览器支持情况
    JSONP 教程
    jQuery ajax() 方法
    AJAX异步的 JavaScript
    自动化构建工具--gulp的初识和使用
    front-end 前端发展学习路线参考图
    Webpack 常用命令总结以及常用打包压缩方法
  • 原文地址:https://www.cnblogs.com/dengchaojie/p/7878669.html
Copyright © 2011-2022 走看看