天天看点

进击的KFC:链式编程

链式编程:

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);

    }];
           

打印结果:

进击的KFC:链式编程

总结:

链式编程要返回自身,每一个链式方法都必须返回明确的类型才能一直 . 下去 ; 利用链式语法,我们可以实现很多巧妙的实例调转,而开发者无需关心此时是调用了哪个实例的方法。