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


一段代码,就实现了效果。。在看一下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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值