美文网首页
iOS链式写法尝试

iOS链式写法尝试

作者: 夏无眠Zz | 来源:发表于2018-04-27 10:53 被阅读4次

    相信大家都自定义过View,如果参数传的过多,那么初始化的方法就会变得很长

    /** init方法 */

    - (instancetype)initWithTitleArray:(NSArray*)titleArray

                       titleColorArray:(NSArray*)titleColorArray

                         btnColorArray:(NSArray*)btnColorArray;

    如果只是自己使用的话,那还是可以接受的。但是如果将这个类作为公用类,将来别人用到的时候,有可能需要修改初始化方法,往里面添加参数,有些参数传值的时候还有约束,需要设置成nil,这样就很不利于维护,也不美观。

    当然我们也可以这样初始化信息

    /** 按钮上的文字数组 */

    @property (nonatomic, strong) NSArray *titleArray;

    /** 按钮上的文字颜色 */

    @property (nonatomic, strong) NSArray *titleColorArray;

    /** 按钮背景颜色 */

    @property (nonatomic, strong) NSArray *btnColorArray;

    能不能像masonry一样,通过链接的方式将参数赋值上去,下面就是我们想要实现的目标。

    tv.titleArray(@[@"选择", @"加入打印列表", @"打印"]) .titleColorArray(@[[UIColor lightGrayColor]).btnColorArray([UIColor blueColor]);

    探索

    网上查了下资料,oc的方法是以中括号[]调用的,而()只有通过block的形式,所以我们有了大体的方向。

    先写一个titleArray的block,注意这里的返回值要写他本身,否则后续调用其他参数的时候就会报错,毕竟void是没有方法的。

    .h文件

    - (TestView *(^)(NSArray *))titleArray;

    .m文件

    - (TestView *(^)(NSArray *))tvTitleArray {     return ^(NSArray *titleArray) {         self.titleArray = titleArray;         return self;     }; }

    这里稍微解读下block

    block的一般声明方式是:返回值类型(^block名称)(参数列表),

    block实现是这样的,block变量=^(参数列表){函数实现};

    .h文件解读 .m文件解读

    当然我们这边可以通过typedef定义block,下面是使用过程。

    typedef TestView *(^titleColorBlock)(NSArray *);

    .h文件

    - (titleColorBlock)tvTitleColorArray;

    .m文件

    - (titleColorBlock)tvTitleColorArray {     return ^(NSArray *titleColorArray) {         self.titleColorArray = titleColorArray;         return self;     } }

    其他信息就不重复了,最后看下调用以及结果展示

            tv.tvBtnColorArray(@[[UIColor yellowColor], [UIColor redColor]])

            .tvTitleArray(@[@"选择", @"加入打印列表", @"打印"])

            .tvTitleColorArray(@[[UIColor lightGrayColor], [UIColor greenColor], [UIColor blueColor]])

            .tvUpdateUI();

    UI展示

    OK,收工。

    相关文章

      网友评论

          本文标题:iOS链式写法尝试

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