链式编程:
1.链式编程思想:是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好。a(1).b(2).c(3)
2.链式编程特点:方法的返回值是block,block必须有返回值(本身对象),block参数(需要操作的值)
代表:Masonry框架、SDAutoLayout框架(相对于前一个比较简单易理解)
首先我们自定义一个类 : Person 类
它存在一些基本属性:
@property (copy, nonatomic, readonly) NSString *name;
@property (copy, nonatomic, readonly) NSString *age;
@property (copy, nonatomic, readonly) NSString *height;
// Objective-C中实现链式编程主要是通过Block来实现
// 所以 可以 设置 对应属性的, 有返回值,有参数的block 的 链式方法
- (Person *(^)(NSString *aName))p_name;
- (Person *(^)(NSString *aName))p_age;
- (Person *(^)(NSString *aName))p_height;
如果对于block 不理解的,可以看一下这篇文章,解释的蛮详细的
http://www.jianshu.com/p/649fca982c6e
// 构造方法:能够快速创建一个Person对象,在一个参数为block的方法中一次性设置好你需要的Person对象
+ (Person *)makePersonObject:(void(^)(Person *object))block;
方法实现:
- (Person *(^)(NSString *aName))p_name{
return ^id(NSString *aName){
_name = aName; // 给对应的属性 赋值
return self; // 再把本类对象 返回出去,继续调用.号
};
}
- (Person *(^)(NSString *aName))p_age{
return ^id(NSString *aName){
_age = aName;
return self;
};
}
- (Person *(^)(NSString *aName))p_height{
return ^id(NSString *aName){
_height = aName;
return self;
};
}
// 构造方法:能够快速创建一个Person 对象
+ (Person *)makePersonObject:(void(^)(Person *object))block{
Person *person = [[Person alloc] init];
block(person);
return person;
}
具体使用:
[Person makePersonObject:^(Person *object) {
object.p_name(@"张三").p_age(@"23").p_height(@"180");
NSLog(@"%@",object);
}];
打印结果:
总结:
链式编程要返回自身,每一个链式方法都必须返回明确的类型才能一直 . 下去 ; 利用链式语法,我们可以实现很多巧妙的实例调转,而开发者无需关心此时是调用了哪个实例的方法。