美文网首页
简单的链式语法及简单的实际运用

简单的链式语法及简单的实际运用

作者: 这真是 | 来源:发表于2017-06-20 16:34 被阅读7次

不管在什么项目中总会有一些控件,它们样式相似却根据不同场景又有所不同。虽然也写了一些便利构造函数来快速的创建一些控件,但总感觉不尽人意,想用更少的代码来创建它们。

所以想到了链式语法,在查询部分资料和尝试后有了这篇日记。
直接百度的参考文章:
简书链接

作者的总结很精髓

首先获得实例中的一个block,然后执行block并返回实例本身,然后再执行实例的另一个block,而在这个block中同样返回实例本身,按此规律通过点语法一直往下执行。

接着我试着写了一个简单的可以用于快速创建UIButton的类:

.h文件内容

//  Created by chizheng on 2017/6/20.
//  Copyright © 2017年 yg-technology. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface CHZButton : UIButton

@property (nonatomic, copy) CHZButton * (^setTitle)(NSString *,UIControlState);

@property (nonatomic, copy) CHZButton * (^setTitleColor)(UIColor *,UIControlState);

@property (nonatomic, copy) CHZButton * (^setFont)(CGFloat);

@property (nonatomic, copy) CHZButton * (^setBackgroundColor)(UIColor *);

@property (nonatomic, copy) CHZButton * (^setCornerRadius)(CGFloat);

@property (nonatomic, copy) CHZButton * (^setImage)(NSString *,UIControlState);

@property (nonatomic, copy) CHZButton * (^addAction)(id,SEL,UIControlEvents);

@end
//  Created by chizheng on 2017/6/20.
//  Copyright © 2017年 yg-technology. All rights reserved.
//

#import "CHZButton.h"


@implementation CHZButton

- (CHZButton * (^)(NSString * title,UIControlState state))setTitle{
    return ^(NSString * title,UIControlState state){
        
        [self setTitle:title forState:state];
        
        return self;
    };
}

- (CHZButton * (^)(UIColor * titleColor,UIControlState state))setTitleColor{
    return ^(UIColor * titleColor,UIControlState state){
        
        [self setTitleColor:titleColor forState:state];
        
        return self;
    };
}

- (CHZButton * (^)(CGFloat font))setFont{
    return ^(CGFloat font){
        
        self.titleLabel.font = [UIFont systemFontOfSize:font];
        
        return self;
    };
}

- (CHZButton * (^)(UIColor * backgroundColor))setBackgroundColor{
    return ^(UIColor * backgroundColor){
        
        [self setBackgroundColor:backgroundColor];
        
        return self;
    };
}

- (CHZButton * (^)(CGFloat cornerRadius))setCornerRadius{
    return ^(CGFloat cornerRadius){
        
        self.layer.cornerRadius = cornerRadius;
        self.clipsToBounds = YES;
        
        return self;
    };
}

- (CHZButton * (^)(NSString * imageName,UIControlState state))setImage{
    return ^(NSString * imageName,UIControlState state){
        
        [self setImage:[UIImage imageNamed:imageName] forState:state];
        
        return self;
    };
}

- (CHZButton * (^)(id target,SEL selector,UIControlEvents events))addAction{
    return ^(id target,SEL selector,UIControlEvents events){
        
        [self addTarget:target action:selector forControlEvents:events];
        
        return self;
    };
}
@end

创建按钮时只需要如下代码

CHZButton * btn = [CHZButton new];
btn.frame = CGRectMake(Margin_leading, 64, screenW-2*Margin_leading, 44);
btn.setFont(18).setTitle(@"测试按钮", UIControlStateNormal).setBackgroundColor(btn_Color).setCornerRadius(4);
btn.addAction(self, @selector(btnAction:), UIControlEventTouchUpInside);
[self.view addSubview:btn];

相关文章

  • 简单的链式语法及简单的实际运用

    不管在什么项目中总会有一些控件,它们样式相似却根据不同场景又有所不同。虽然也写了一些便利构造函数来快速的创建一些控...

  • 自定义button(链式语法)

    简单的撸一个demo,里面包含枚举、链式语法、语法糖。这是.h文件 .m文件 使用的时候: 只是一个很简单的dem...

  • OC链式语法的实现

    网友们对链式语法的评价:1. OC的中括号链式语法比较简单,就是中括号返回下一个中括号调用的对象即可。如[[[[s...

  • 链式编程的简单使用

    简单使用链式编程来设置UIButton的一些内容: 链式编程调用的点语法,本质也是调用方法,下面方法也可写成btn...

  • 利用block实现简单链式语法

    接触到Masonry这一框架后 被它内部简洁明了的链式语法所惊艳到 瞬间链式语法就像神奇的魔法棒 通过一行链式语...

  • 闭包

    闭包表达式语法 {(parameters)->(returntype)in statements } 简单运用: ...

  • iOS 链式编程

    链式编程 链式编程简单的说就是将多个方法用点语法连接起来,让代码更加简洁,可读性更强。例如Masonry,SDAu...

  • JQuery

    JQuery 1、JQuery特点 (1)轻量级(2)链式语法(3)简单(4)写的更少,做的更多 2、本地调用: ...

  • OC实现链式语法

    1.什么是链式语法 简单的是说就是可以通过OC的点语法去调用方法甚至是连续调用多个方法,虽然OC本来可以通过点语法...

  • Application 笔记

    Application 简单的解析 实际的运用 在实际的运用中我们总是将 Application 当做一个工具类使...

网友评论

      本文标题:简单的链式语法及简单的实际运用

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