一步一步教你理解和實現iOS中的鏈式程式設計和函數語言程式設計
阿新 • • 發佈:2018-12-24
談到鏈式程式設計和函數語言程式設計,那Masonry幾乎就是最經典的代表.如:
make.top.equalTo(self.view).offset(60)
像這樣top.equalTo(self.view).offset(60)
通過”點”語法,將需要執行的程式碼塊連續的書寫下去,就是鏈式程式設計.它能使程式碼簡單易讀,書寫方便
像這樣equalTo(self.view)
通過’()’去呼叫函式,一般呼叫完返回的還是這個物件本身,就是函數語言程式設計.
1.傳統寫法,兩個方法需要單獨呼叫,也不能任意組合順序
建立Person類
Person.h:
- (void) eat1;
- (void)sleep1;
Person.m:
- (void)eat1
{
NSLog(@"%s",__FUNCTION__);
}
- (void)sleep1
{
NSLog(@"%s",__FUNCTION__);
}
控制器中呼叫Person類中方法
ViewController.m:
Person *person = [[Person alloc] init];
[person eat1];
[person sleep1];
2.用’[]’實現連續呼叫
Person.h:
- (Person *)eat2;
- (Person *)sleep2;
Person.m:
- (Person *)eat2
{
NSLog(@"%s",__FUNCTION__);
return self;
}
- (Person *)sleep2
{
NSLog(@"%s",__FUNCTION__);
return self;
}
ViewController.m:
[[person eat2] sleep2];
[[person sleep2] eat2];
3.用’()”實現函數語言程式設計,用block實現
Person.h:
- (void (^)())eat3;
- (void (^) ())sleep3;
Person.m:
- (void (^)())eat3
{
//定義block
void (^eat3Block)() = ^ {
NSLog(@"%s",__FUNCTION__);
};
return eatBlock;
}
- (void (^)())sleep3
{
return ^ {
NSLog(@"%s",__FUNCTION__);
};;
}
ViewController.m:
person.eat3();
person.sleep3();
4.實現函式式 + 鏈式(無參)
Person.h:
- (Person * (^)())eat4;
- (Person * (^)())sleep4;
Person.m:
- (Person *(^)())eat4
{
Person * (^eat4Block)() = ^ {
NSLog(@"%s",__FUNCTION__);
return self;
};
return eat4Block;
}
//上下兩種寫法一樣
- (Person *(^)())sleep4
{
return ^ {
NSLog(@"%s",__FUNCTION__);
return self;
};
}
ViewController.m:
person.eat4().sleep4();
person.sleep4().eat4();
5.實現函式式 + 鏈式(帶參)
Person.h:
- (Person * (^)(NSString *foodName))eat5;
- (Person * (^)(NSInteger hour))sleep5;
Person.m:
- (Person *(^)(NSString *))eat5
{
Person * (^eat5Block)() = ^(NSString *foodName) {
NSLog(@"吃: %@",foodName);
return self;
};
return eat5Block;
}
//上下兩種寫法一樣
- (Person *(^)(NSInteger))sleep5
{
return ^(NSInteger hour) {
NSLog(@"睡了%ld小時",(long)hour);
return self;
};
}
ViewController.m:
person.eat5(@"蛋糕").sleep5(8);
person.sleep5(8).eat5(@"麵包");