鏈?zhǔn)骄幊?/h5>
用點語法把多個方法都連起來折剃,形成一句代碼怕犁,這樣可讀性強。比如Masonry奏甫。
0.簡單的栗子
OC中,我們用到最多的點語法可能就是獲取屬性了。如self.view.backgroundColor = [UIColor yellowColor];
self.view是get方法獲取了view屬性款筑,后面的是set方法 腾么,用=右邊的來賦值。
//上面的方法可以拆分成
UIView * tempView = [self view];//self.view
//.backgroundColor = [UIColor yellowColor]//暫且看需要傳參數(shù)的點方法吧
[tempView setBackgroundColor:[UIColor yellowColor]];
-
簡單的使用攘须,不帶參數(shù)的
類比get方法有返回值殴泰,沒有參數(shù)浮驳,想要做到obj.xxx.yyy.zzz捞魁。新建一個Dog類,有三個方法,吃飯奉件,睡覺昆著,散步。每個方法都log輸出一下凑懂。由于這三個方法都需要類的實例來實現(xiàn)征候,所以返回值是自身。
//Dog.h文件中
-(Dog*)eat;
-(Dog*)sleep;
-(Dog*)walk;
//Dog.m中
-(Dog*)eat{
NSLog(@"吃飯");
return self;
}
//
//
Dog *dog = [Dog new];
dog.eat.sleep.walk;
//打印結(jié)果
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方法不應(yīng)該有干別的事(副作用)现拒,只老老實實的返回值就行了望侈。當(dāng)然你可以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();
- 帶參數(shù)的用法
//.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] 去美食街和小湖邊散步