iOS--链式编程

来源:互联网 发布:新浪网络经纪人 编辑:程序博客网 时间:2024/05/01 13:46

相信用过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);    }]];}
效果呢,是这样的


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

.h

#import <UIKit/UIKit.h>@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,这样就实现了用链式编程法实现了一个自定义的标签了。


1 0
原创粉丝点击