美文网首页
OC代码使用链式编程

OC代码使用链式编程

作者: 淡暗 | 来源:发表于2018-02-04 01:46 被阅读0次
    链式编程

    用点语法把多个方法都连起来,形成一句代码,这样可读性强。比如Masonry。

    0.简单的栗子

    OC中,我们用到最多的点语法可能就是获取属性了。如self.view.backgroundColor = [UIColor yellowColor];
    self.view是get方法获取了view属性,后面的是set方法 ,用=右边的来赋值。

    //上面的方法可以拆分成
        UIView * tempView = [self view];//self.view
    //.backgroundColor = [UIColor yellowColor]//暂且看需要传参数的点方法吧
        [tempView setBackgroundColor:[UIColor yellowColor]];
    
    1. 简单的使用,不带参数的

    类比get方法有返回值,没有参数,想要做到obj.xxx.yyy.zzz。新建一个Dog类,有三个方法,吃饭,睡觉,散步。每个方法都log输出一下。由于这三个方法都需要类的实例来实现,所以返回值是自身。

    //Dog.h文件中
    -(Dog*)eat;
    -(Dog*)sleep;
    -(Dog*)walk;
    
    //Dog.m中
    -(Dog*)eat{
        NSLog(@"吃饭");
        return self;
    }
    //
    //
        Dog *dog = [Dog new];
        dog.eat.sleep.walk;
    //打印结果
    chainProgramming[10978:859266] 吃饭
    chainProgramming[10978:859266] 睡觉
     chainProgramming[10978:859266] 散步
    

    可以运行,但是会有一个警告 Property access result unused - getters should not be used for side effects。属性返回值没有被使用,也就是return self没有被接收。Xcode把这些方法都认成了某个属性的get方法了,并且提示说get方法不应该有干别的事(副作用),只老老实实的返回值就行了。当然你可以dog=dog.eat.sleep.walk;可以用,也没有警告。
    正确的做法是返回一个block,代码可以修改为

    //Dog.h文件中
    -(Dog*(^)(void))eat;
    -(Dog*(^)(void))sleep;
    -(Dog*(^)(void))walk;
    
    //Dog.m中
    -(Dog*(^)(void))eat{
        NSLog(@"吃饭");
        return ^(){
            return self;
        };
    }
    
    //
    dog.eat().sleep().walk();
    
    1. 带参数的用法
    //.h
    -(Dog*)eat;
    -(Dog*(^)(int y))sleep;
    -(Dog*(^)(NSString* x,NSString* y))walk;
    
    //.m
    -(Dog*)eat{
        NSLog(@"吃饭");
        return self;
    }
    -(Dog*(^)(int y))sleep{
        return ^(int y ){
            NSLog(@"睡觉%d分钟",y);
            return self;
        };  
    }
    -(Dog*(^)(NSString* x,NSString *y))walk{
        return ^(NSString* x,NSString *y){
            NSLog(@"去%@和%@散步",x,y);
            return self;
        };
    }
    //vc
    dog.eat.sleep(100).walk(@"美食街",@"小湖边");
     chainProgramming[11710:942872] 吃饭
     chainProgramming[11710:942872] 睡觉100分钟
     chainProgramming[11710:942872] 去美食街和小湖边散步
    

    相关文章

      网友评论

          本文标题:OC代码使用链式编程

          本文链接:https://www.haomeiwen.com/subject/fzwuzxtx.html