AJ分享,必須精品
### 一:場景
我們有個對象人,他有兩個方法,一個是學習study,一個是跑步run,
這個人有個怪癖,跑完步之后必須學習,為了實現這個方法并且能調用方便,我們讓跑步和學習都回返回自己這個對象作為下一次調用的快捷方式,代碼如下:
調用:
~~~
int main(int argc, const char * argv[])
{
@autoreleasepool {
//初始化人
Person *p = [[Person alloc] init];
//調用
[[p study] run];
return 0;
}
~~~
人對象:
~~~
// Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
- (Person *)study;
- (Person *)run;
@end
~~~
~~~
// Person.m
#import "Person.h"
@implementation Person
- (Person *)study
{
NSLog(@"study----");
return self;
}
- (Person *)run
{
NSLog(@"run----");
return self;
}
@end
~~~
運行結果

### 二:block鏈式結構實現
調用:
~~~
int main(int argc, const char * argv[])
{
@autoreleasepool {
Person *p = [[Person alloc] init];
p.study(@"xx寶典").run().study(@"xx剪發");
}
return 0;
}
~~~
人對象:
~~~
//Person.h
@interface Person : NSObject
- (Person *(^)(NSString *name))study;
- (Person *(^)())run;
@end
~~~
~~~
//Person.m
@implementation Person
- (Person *(^)(NSString *))study
{
return ^(NSString *name){
NSLog(@"study----%@", name);
return self;
};
}
- (Person *(^)())run
{
return ^{
NSLog(@"run----");
return self;
};
}
@end
~~~
在這里面,我們
p.study(@”xx寶典”).run().study(@”xx剪發”);
調用study方法:p.study
執行block:p.study(@”xx寶典”)
結合person內部寫的方法
~~~
- (Person *(^)(NSString *))study
{
return ^(NSString *name){
NSLog(@"study----%@", name);
return self;
};
}
~~~
明顯可以看到,當執行p.study(@”xx寶典”)時候,內部是return一個返回值是person*類型(最后的return self)的block 這也就解釋了為什么下一句可以繼續連著用點來調用了。也就是說返回的是一段block,這段block里面又有返回值,返回值是person的對象self。
這里的參數有點暈,記住就好,用鏈式結構的block的巧妙用法,簡單了解就好
執行結果

?