AJ分享,必須精品java
咱們有個對象人,他有兩個方法,一個是學習study,一個是跑步run,
這我的有個怪癖,跑完步以後必須學習,爲了實現這個方法而且能調用方便,咱們讓跑步和學習都回返回本身這個對象做爲下一次調用的快捷方式,代碼以下:
調用:markdown
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
運行結果
ui
調用:spa
int main(int argc, const char * argv[])
{
@autoreleasepool {
Person *p = [[Person alloc] init];
p.study(@"xx寶典").run().study(@"xx剪髮");
}
return 0;
}
人對象:code
//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的巧妙用法,簡單瞭解就好string
執行結果it