iOS 利用Block实现链式编程

1. 传统编程

// Person的方法

- (void)eat

{

NSLog(@"吃饭");

}

- (void)learn

{

NSLog(@"学习");

}

- (void)play

{

NSLog(@"娱乐");

}

// 连续做事情

Person *p = [ [Person alloc] init ];

[p eat];

[p learn];

[p play];

2. 不用Block,实现链式编程

// Person的方法

- (Person *)eat

{

NSLog(@"吃饭");

   return self;

}

- (Person *)learn

{

NSLog(@"学习");

return self;

}

- (Person *)play

{

NSLog(@"娱乐");

return self;

}

// 连续做事情,这么写看得眼花

Person *p = [ [Person alloc] init ];

[[[p eat] learn] play];

3. 利用Block实现链式编程

// Person的方法

- ( Person *(^)() )eat

{

  return ^{

        NSLog(@"吃饭");

      return self;

  };

}

- ( Person *(^)() )learn

{

  return ^{

        NSLog(@"学习");

      return self;

  };

}

- ( Person *(^)() )play

{

  return ^{

        NSLog(@"娱乐");

      return self;

  };

}

// 连续做事情

Person *p = [ [Person alloc] init ];

p.eat().learn().play();

4. 带参数的链式编程

比如人的吃饭方法,参数是 NSString *food

- ( Person *(^)() )eat:(NSString*) food

{

  return ^(food){

        NSLog(@"吃饭);

      return self;

  };

}

如果是上面这种写法:p.eat后面不能跟 :food, 因为p.eat本身就等同于[ p eat:(NSString *)food ],如果写p.eat:food ,相当于 [p eat::food],这样是不对的.

所以正确的写法:

- ( Person *(^)( NSString* food ) )eat

{

  return ^( NSString* food ){

        NSLog(@"吃饭---- %@",food);

      return self;

  };

}

// 连续做事情

p.eat(@"白菜").learn().play();

5. 总结,用Block实现链式编程无非就是:方法的返回值是一个Block,Block内部装着真正要执行的方法,Block内部再返回self;

     如果有参数,通过Block的参数往里传.

- ( 返回值是Block ) 方法名

{

    return *{

      Block内部装着真正要执行的代码

      return self;

    };

}

时间: 2024-10-14 08:08:30

iOS 利用Block实现链式编程的相关文章

第四十一篇、Masonry利用Block实现链式编程

一直都觉得使用Masonry的时候语法特别优雅,很早的时候就想尝试下怎么实现, 一直都没弄明白,直到最近看见一篇叫block实现链式编程的 使用实例: UIButton * btn = [UIButton button].normalTitle(@"普通状态").normalImage([UIImage imageNamed:@"icon_help"]).selectedTitle(@"选中状态"); /// 声明文件 @interface UI

(一一八)利用block实现链式编程

有些时候需要不断地调用方法,如果使用传统方案,需要拿到对象多次调用,例如有一个Ball对象,实现了up.down.left.right四个方法,分别控制球的运动方向,如果要实现球向右再向下,需要这么写: [ball right]; [ball down]; 如果能够按照下面这样写,会更加方便. [[ball right] down]; 要实现这样的功能十分简单,只要每个方法都返回self即可,但是如果调用次数多,会有很多个中括号.如果能改造成后面这样,会更好. ball.right().down

猫猫学iOS 之BLOCK的妙用_利用block实现链式编程

猫猫分享,必须精品 原创文章,欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243 一:场景 我们有个对象人,他有两个方法,一个是学习study,一个是跑步run, 这个人有个怪癖,跑完步之后必须学习,为了实现这个方法并且能调用方便,我们让跑步和学习都回返回自己这个对象作为下一次调用的快捷方式,代码如下: 调用: int main(int argc, const char * argv[]) { @autoreleasepool { //初始化

新浪微博客户端(63)-使用block进行链式编程

Person.h #import <Foundation/Foundation.h> @interface Person : NSObject - (Person *(^)())study; - (Person *(^)())run; @end Person.m #import "Person.h" @implementation Person - (Person *(^)())study { return ^{ NSLog(@"study"); ret

Block实现链式编程

1.Person.h文件 #import <Foundation/Foundation.h>@class Dog;@interface Person : NSObject@property (copy, nonatomic) NSString *name;@property (assign, nonatomic) float weight;@property (strong, nonatomic) Dog *dog;- (Person *(^)(void))run;- (Person *(^)

iOS开发技巧系列---使用链式编程和Block来实现UIAlertView

UIAlertView是iOS开发过程中最常用的控件之一,是提醒用户做出选择最主要的工具.在iOS8及后来的系统中,苹果更推荐使用UIAlertController来代替UIAlertView.所以本文也并不提倡开发者再使用UIAlertView,本文的目的是探讨如何将原来的给变量赋值和通过Delete来回调的方式变成链式编程风格和通过Block来回调.通过学习对UIAlertView的改造让各位iOS开发者能够学会这种更加便捷的开发方式 什么是链式编程 对于有一定开发经验的开发者来说,链式编程

iOS:用Block写一个链式编程

一.介绍 链式编程是一个比较新颖的编程方式,简单直观,用起来也比较舒服.目前比较有名的Mansory和BabyBlueTooth就是使用链式编程写的第三方框架. 二.写法 链式编程写法不同于传统方式,初次写起来比较别扭,但是一旦习惯了,用起来比较得心应手.那么,如何写呢?其实就是一个对象调用它的实例方法后返回一个block(已经定义过),而这个block内部又返回该对象.依此类推,该对象不论调用多少个它的实例方法,最终都会返回该对象本身. 三.实例 LearnManager类定义和实现 // /

iOS端JSON转Model链式编程框架SuperKVC使用方法与原理

背景 在client编程中.字典转模型是一个极为常见的问题,苹果提供了KVC来实现NSDictionary到Model的注入,可是KVC仅仅能进行单层浅注入.且无法处理类型转换.key与属性名不正确应.深度注入等问题,笔者从Masonry得到启示,开发了一个通过链式配置注入器实现深度注入.类型转换.key-属性名映射等功能的轻量级注入框架SuperKVC.眼下已经开源到GitHub,点击这里前往.欢迎Star和Fork.欢迎和我一起完好这个框架! 本文将从应用和原理两个角度介绍SuperKVC

jQuery插件编写及链式编程模型

jQuery插件编写及链式编程模型小结 JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我们就来看看如何把我们常用的功能做出JQuery插件,然后像使用jQuery那样来操作DOM.  一.jQuery插件开发快速上手 1.jQuery插件模板 关于jQuery插件的编写,我们可以通过为jQuery.fn增加一个新的函数来编写jQuery插件.属性的名字就是你的插件的名字,其模板如下: