IOS-OC链式编程小记

作者: juefeiye | 来源:发表于2017-06-13 16:00 被阅读50次

1.block作为参数

相信大家用block已经用了很久了,我今天主要记录下带返回类型,切返回类似为该类对象的block。感觉有点绕。先看看block的定义,我的理解是 block是事先定义好的一段代码段,在合适的时候被传入参数值且被调用。

typedef void(^ChOkBtnClickBlock)(NSString *Msg); 这样我们定义了一个名叫 ChOkBtnClickBlock的block。

该block的返回值为空,参数为字符串类型。

但是如果,返回值类型也为NSString是个什么鬼呢?我们平时应该很少用到吧?

就是这个样子:

typedef NSString *(^ChOkBtnClickBlock)(NSString *Msg);

在属性中增加 

@property(nonatomic,copy)ChOkBtnClickBlock chOkBtnOption;

在OkBtn的点击事件中增加

#pragma mark ---确定按钮点击

/**确定按钮点击*/

- (IBAction)sureBtnClick:(UIButton *)sender {

if (self.chOkBtnOption) {

NSString *blockReturnStr=@"";

//执行完毕block返回当前block的返回值

blockReturnStr=self.chOkBtnOption(@"okBtnInfo");

NSLog(@"blockReturnStr:%@",blockReturnStr);

}

}

在特定的地方把block要执行的代码写好

chOkBtnOption=^NSString *(NSString *Msg)

{

NSString *newMsg=[NSString stringWithFormat:@"我是新的%@",Msg];

return newMsg;

};

执行结果如图

好了,上面大概就是block的一个回顾。

一个block作为参数的回顾

2 block作为返回值

先思考个问题,我们为什么要让block作为返回值呢,有什么好处?我们继续回忆一下block的特性,预先写好的一段程序代码,在特定的时候执行。

当我们写了一个类M的对象方法A的时候,我们需要执行该方法时就需要 alloc一个对象Obj 然后该对象调用A方法:[Obj A];

同时我们又写了 类M的对象方法 B ,C ,D 如果要执行他们呢?貌似我们只能一个一个方法挨着执行。如下

[Obj A];

[Obj B];

[Obj C];

[Obj D];

我们能不能一行代码就执行4个方法呢?

我们知道,要执行对象的方法,必须要是对象的实例,例如要执行类M的A方法必须要

[Obj A];此时必须要有一个实例对象Obj

那么我们可以通过block来返回一个实例对象 例如

/** 设置取消和确定的字体颜色 */

-(ChNormalPickView *(^)(UIColor *))chSetPickButtonColor;

说明一下:有一个名叫 chSetPickButtonColor 的对象方法。

返回值是一个 参数为UIColor的Block,也就是说,执行这个chSetPickButtonColor方法会得到一个Block(实值一段代码段),同时 Block的返回值类型为 ChNormalPickView  (可以简单理解类似为 NSString 这样的类)。也就是说调用block 会得到一个返回值 ChNormalPickView的对象M。

例如 M.chSetPickButtonColor(myColor)的返回值还是M

即类似 M.chSetPickButtonColor(myColor)==M对象,然后可以继续用M对象调用其他对象方法 如 M.A().B().C().D()

粘贴一段代码端给大家参考下

1方法声明

/** 设置取消和确定的字体颜色 */

-(ChNormalPickView *(^)(UIColor *))chSetPickButtonColor;

2方法实现

/** 设置取消和确定的字体颜色 */

-(ChNormalPickView *(^)(UIColor *))chSetPickButtonColor

{

return ^ChNormalPickView *(UIColor *titleColor){

[self.cancelButton setTitleColor:titleColor forState:UIControlStateNormal];

[self.sureButton setTitleColor:titleColor forState:UIControlStateNormal];

return self;

};

}

3方法调用

pick.chSetPickButtonColor([UIColor redColor]);



回头我传一个demo到github

哈哈希望大家可以在GitHub上面start

demo的地址 https://github.com/juefeiyechen/IosBlockLianShi.git

相关文章

  • IOS-OC链式编程小记

    1.block作为参数 相信大家用block已经用了很久了,我今天主要记录下带返回类型,切返回类似为该类对象的bl...

  • iOS-OC链式编程Masonry链式的实现

    一.链式编程 链式编程使用(.)点语法,将一系列操作链接起来,顺序可以随意调节。 每一步操作后必须返回--操作对象...

  • jQuery 链式编程

    jQuery 链式编程 链式编程原理 链式编程代码示例 隐式迭代

  • 链式编程思想

    链式编程思想 链式编程思想

  • iOS 链式编程

    链式编程 主要介绍链式编程原理,以及如何创建链式编程 编程范式 在介绍链式编程之前,首先来了解下什么是编程范式。 ...

  • ReactiveObjC入门

    ReactiveObjC基础用法 iOS开发三种编程方式(响应式编程、函数编程、链式编程),函数编程最常用,链式编...

  • 工作iOS技术总结

    链式编程、函数式、面向接口编程思想 iOS 之ReactiveCocoa 链式编程2 WKWebView的缓存处理...

  • 一、链式编程思想、响应式编程思想和函数式编程

    1. 链式编程思想 链式编程思想的核心就是方法的返回值必须是Block,Masonry是链式编程思想应用的代表。 ...

  • 链式编程和函数式编程的简单理解

    链式编程 此前看到SnipKit中运用了很多链式编程的代码,感觉非常好用:例如: //此段就是链式编程的典型代码m...

  • 编程思想-链式编程

    编程思想-链式编程 链式编程(链式调用)的主要表现是支持点语法结构的代码,代表库可以参照 Masonry 或 Sn...

网友评论

    本文标题:IOS-OC链式编程小记

    本文链接:https://www.haomeiwen.com/subject/tnudqxtx.html