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链式编程小记

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