iOS链式编程学习笔记

概念:像这样top.equalTo(self.view).offset(60)通过”点”语法,将需要执行的代码块连续的书写下去,就是链式编程.它能使代码简单易读,书写方便。

原理:保证每个方法执行之后,都返回对象本身,然后对象本身通过点语法再调用别的方法,以此实现链式执行。点语法其实是oc中取属性的一种语法。oc中比较神奇的一点是,即使没有属性,只有方法,点语法也可以把一个方法当做getter 方法来用,可以点式调用,像 property 一样。

代码:

@interface Test : NSObject

-(Test *)run;

-(Test * (^)(NSString *))testPrint;

@end

@implementation Test

-(Test *)run {

    NSLog(@"----------------run-------------------");

    return self;

}

-(Test * (^)(NSString *))testPrint {

    return ^(NSString * str){

        NSLog(@"----------------%@-------------------",str);

        return self;

    };

}

@end

Test *t = [[Test alloc]init];

    t.run;

    t.testPrint(@"000000000");

    [t testPrint](@"3333333333333");

    t.run.testPrint(@"1111111111");

    [t run].testPrint(@"22222222222");

    [[t run] testPrint](@"3333333333333");

t.run很好理解,直接调用了getter方法。-(Test *)run。而且返回了self对象。

t.testPrint(@"000000000"); 其实应该这样理解:t.testPrint (@"000000000")

t.testPrint 调用了getter方法,-(Test * (^)(NSString *))testPrint 返回了一个block。block后边加上带参数的括号,执行这个block,最后block执行完成之后返回了self对象。

这两点理解之后,下边的几个调用原理也就显而易见了。

总结:ios中链式编程是利用点语法实现的,在实际应用中,如果方法需要传参数,那么就可以用block的getter方法,如果不需要传参,就像例子中的run方法,可以不用block。具体怎么实现要看需求。

你可能感兴趣的:(iOS链式编程学习笔记)