iOS--链式编程

相信用过masonry的童鞋,一定被它的魅力折服,真的很好用啊。masnory是用链式编程的思想来写的,用起来一个个block用点连接起来,即省代码又美观,巴特,链式编程是怎么样实现的嘞。。。不用着急,且往下看。

讲链式编程,不得不讲oc中的点语法,.XX是getter,.XX = XXX;是setter,显然链式编程是一串的,所以我们应该想到讲block声明为属性,并且在这些block属性的getter方法中做一些事情。哈哈,是不是简单易懂,巴特,如何去具体的实现链式编程呢,别急,这儿有我写的一个小demo,看了希望你对链式编程能理解。。

Demo在这儿https://github.com/JLHuu/LinkProgramDemo.git

其实,链式编程理解起来并不难,一个是讲block声明为属性,另一个是要注意block一定要有返回值。

废话不多说,贴点代码

这儿是我在vc中写的一段代码

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    [self.view addSubview:[MyLabel labelinitWith:^(MyLabel *la){
        la.labelframe(CGRectMake(100, 100, 200, 200)).labackgroundcolor([UIColor redColor]).lacornerradius(30).lastring(@"是不是感觉masnory用起来屌屌的,这是一个链式编程的简单实现,希望对你理解链式编程有所帮助~~~~",[UIColor greenColor],15.f);
    }]];
}
效果呢,是这样的

iOS--链式编程_第1张图片

一段代码,就实现了效果。。在看一下Mylabel中的实现代码

.h

#import 

@interface MyLabel : UILabel
@property(nonatomic,copy)MyLabel *(^labelframe)(CGRect frame);
@property(nonatomic,copy)MyLabel *(^lacornerradius)(CGFloat cornerradius);
@property(nonatomic,copy)MyLabel *(^labackgroundcolor)(UIColor *backgroundcolor);
@property(nonatomic,copy)MyLabel *(^lastring)(NSString *str,UIColor *strcolor,CGFloat fontsize);

// 写了一个类方法来创建实例
+(instancetype)labelinitWith:(void (^)(MyLabel *la)) initblock;
@end
.m

#import "MyLabel.h"

@implementation MyLabel
+(instancetype)labelinitWith:(void (^)(MyLabel *))initblock
{
    MyLabel *la = [[MyLabel alloc] init];
    if (initblock) {
        initblock(la);
    }
    return la;
}

-(MyLabel *(^)(CGRect))labelframe
{
    return ^MyLabel *(CGRect rect){
        self.frame = rect;
        return self;
    };
}
-(MyLabel *(^)(UIColor *))labackgroundcolor
{
    return ^MyLabel *(UIColor *color){
        self.backgroundColor = color;
        return self;
    };
}
-(MyLabel *(^)(CGFloat))lacornerradius
{
    return ^MyLabel *(CGFloat a){
        self.layer.cornerRadius = a;
        self.layer.masksToBounds = YES;
        return self;
    };
}
-(MyLabel *(^)(NSString *, UIColor * ,CGFloat))lastring
{
    return ^MyLabel *(NSString *str ,UIColor *color,CGFloat fontsize){
        self.text = str;
        self.textColor = color;
        self.font = [UIFont systemFontOfSize:fontsize];
        self.numberOfLines = 0;
        self.textAlignment = NSTextAlignmentCenter;
        return self;
    };
}
@end

OK,这样就实现了用链式编程法实现了一个自定义的标签了。


你可能感兴趣的:(iOS开发小知识)