链式编程思想:是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好。a(1).b(2).c(3)
-
链式编程特点:方法的返回值是block,block必须有返回值(本身对象),block参数(需要操作的值)
-
代表:Masonry框架。
[View mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.view); make.left.equalTo(self.view); make.width.mas_equalTo(100); make.height.mas_equalTo(100); }];
要想实现链式编程,首先,你必须掌握block的用法
定义一个block
typedef void (^testBlock)();
1.无参数无返回值的block
void (^testBlock)() = ^(){ NSLog(@"无参数无返回值的block"); };
2.有参数无返回值的block
void (^testBlock)(int,int) = ^(int a,int b){ NSLog(@"有参数无返回值的block %d",a + b); };
3.有参数有返回值的blockNSString * (^testBlock)(NSString *) = ^(NSString * str){ NSLog(@"有参数有返回值的block %@",str); return str; };
接下来就尝试自己写一个链式编程的小Demo创建一个Person类,给Person类添加3个方法 .h
@interface Person : NSObject - (Person * (^)(NSString *))eat; - (Person * (^)(NSString *))study; - (Person * (^)(NSString *))play; @end
@implementation Person - (Person *(^)(NSString *))eat{ return ^ (NSString *string){ NSLog(@"吃%@",string); return self; }; } - (Person *(^)(NSString *))study{ return ^(NSString * string){ NSLog(@"学%@啦~",string); return self; }; } - (Person *(^)(NSString *))play{ return ^(NSString *string){ NSLog(@"%@啦~",string); return self; }; } @end
Person * person = [[Person alloc] init]; person.eat(@"火锅").study(@"数学").play(@"打篮球");
打印出如下结果2016-07-24 11:44:55.185 链式编程[4327:88538] 吃火锅 2016-07-24 11:44:55.186 链式编程[4327:88538] 学数学啦~ 2016-07-24 11:44:55.186 链式编程[4327:88538] 打篮球啦~