博客> 初见iOS链式语法
初见iOS链式语法
2018-05-22 15:21 评论:0 阅读:404 二日三点
ios 链式语法

最近逛代码的块的时候发现了一个很酷的东西,自己尝试写了下,感觉又可以和大家分享一波.

那么这篇文章的灵感来源于什么呢?Marsony里面的链式语法,那么OC式否也可以用链式语法来做我们经常做的一些事情呢?如果可以做,那么代码确实是可以少很多。然后,我就网上找了一些文章,确实可以是可以使用的。好了,还是先看我的代码结构

 10E24AAC-08DC-49E1-9731-B4225CD6944F.png

首先我们来看下C层的代码

#import "ViewController.h"
#import "UIButton+Chained.h"
#import "MKChainedLabel.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    //1.这是一个button的扩展做成的链式语法 这里采用了分段式写法
    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 100, 100)];

    //2.这里是没用采用链式写法的代码段落
    //button.backgroundColor = [UIColor blueColor];
    //[button setTitle:@"呵呵" forState:UIControlStateNormal];
   // button.titleLabel.font = [UIFont systemFontOfSize:14.f];
    //[button setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];

    //这里是采用链式写法的代码段落 可以看到很少
    button.titleParams(@"呵呵", 14.f, [UIColor orangeColor])
          .blackGroundColor([UIColor blueColor]);

    [self.view addSubview:button];

    //3.这个是自定义的label 采用了合成式的写法 直接一句话完成所有设定
    MKChainedLabel *label = [MKChainedLabel new].chianedFrame(CGRectMake(0, 100, 100, 100))
                                                .chianedBlackgroundColor([UIColor orangeColor])
                                                .chianedTextSet(@"好看吗",
                                                                [UIColor blueColor],
                                                                [UIFont systemFontOfSize:14.f]);

    //4.没有采用链式语法的模式
//    label.frame = CGRectMake(0, 100, 100, 100);
//    label.backgroundColor = [UIColor orangeColor];
//    label.text = @"好看吗";
//    label.textColor = [UIColor blueColor];
//    label.font = [UIFont systemFontOfSize:14.f];

    [self.view addSubview:label];

}

代码量减少很多嘛!工作又可以变的更加轻松了.美滋滋

当然要工作时间少,生活美滋滋。必要的准备工作是必不可少的

我们来看下UIButton扩展里面的代码是怎么完成链式的

#import <UIKit>

@interface UIButton (Chained)

/**
 设置Button.TextLabel的文字 字体大小 文字颜色
 */
@property (copy, nonatomic) UIButton* (^titleParams)(NSString *title,CGFloat fountSize,UIColor *textColor);

/**
 设置按钮的背景颜色
 */
@property (copy, nonatomic) UIButton* (^blackGroundColor)(UIColor *blackGroundColor);

@end
#import "UIButton+Chained.h"

@implementation UIButton (Chained)

#pragma mark - getter方法

- (UIButton *(^)(NSString *,CGFloat ,UIColor *))titleParams {
    return ^UIButton *(NSString *title,CGFloat fountSize,UIColor *textColor){
        [self setTitle:title forState:UIControlStateNormal];
        [self.titleLabel setFont:[UIFont systemFontOfSize:fountSize]];
        [self.titleLabel setTextColor:textColor];
        return self;
    };
}

- (UIButton *(^)(UIColor *))blackGroundColor {
    return ^UIButton *(UIColor *blackGroundColor) {
        self.backgroundColor = blackGroundColor;
        return self;
    };
}

#pragma mark - setter
- (void)setTitleParams:(UIButton *(^)(NSString *, CGFloat, UIColor *))titleParams {

}

- (void)setBlackGroundColor:(UIButton *(^)(UIColor *))blackGroundColor {

}

@end

原理简单,重写了getter方式,然后赋值下

同样的看下自定义label

#import <UIKit>

@interface MKChainedLabel : UILabel

@property (copy, nonatomic) MKChainedLabel *(^chianedFrame)(CGRect frame);

@property (copy, nonatomic) MKChainedLabel *(^chianedBlackgroundColor)(UIColor *color);

@property (copy, nonatomic) MKChainedLabel *(^chianedTextSet)(NSString *text,UIColor *textColor,UIFont *textFont);

@end
#import "MKChainedLabel.h"

@implementation MKChainedLabel

- (MKChainedLabel *(^)(CGRect))chianedFrame {
    return ^MKChainedLabel *(CGRect rect){
        self.frame = rect;
        return self;
    };
}

- (MKChainedLabel  *(^)(UIColor *))chianedBlackgroundColor {
    return ^MKChainedLabel *(UIColor *color) {
        self.backgroundColor = color;
        return self;
    };
}

- (MKChainedLabel *(^)(NSString *,UIColor *,UIFont *))chianedTextSet {
    return ^MKChainedLabel *(NSString *text,UIColor *textColor,UIFont *textFont) {
        self.text = text;
        self.textColor = textColor;
        self.font = textFont;
        return self;
    };
}

@end

同样也是这样完成,是不是很简单,用这种写法,一整个项目下来,节约了10~15%的时间还是有的,那么这些时间我们不妨撩撩妹子~~

下一篇 :iOS链式语法功能实践 地址: http://blog.cocoachina.com/article/70199

收藏
0
sina weixin mail 回到顶部