IOS-OC链式编程小记

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;

};

执行结果如图


IOS-OC链式编程小记_第1张图片

好了,上面大概就是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]);


IOS-OC链式编程小记_第2张图片




回头我传一个demo到github

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

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

你可能感兴趣的:(IOS-OC链式编程小记)