1.block作為屬性
寫法1:typedef聲明block名稱
typedef id(^Block_Name)(id arg1, id arg2);
@property (nonatomic, copy) Block_Name block;
寫法2:直接書寫
@property (nonatomic, copy) id(^Block_Name)(id arg1, id arg2);
2.block作為參數(shù)
寫法:
- (void)method:(id(^)(id arg1,id arg2))argBlock;
3.block作為返回值
- (void (^)())walk;
//實(shí)現(xiàn)
- (void(^)())walk{
return ^(){
NSLog(@"走起");
};
}
block作為返回值可以實(shí)現(xiàn)簡(jiǎn)單的鏈?zhǔn)骄幊?/p>
- (Person *(^)(int))eat;
- (Person *(^)(int))sleep;
//實(shí)現(xiàn)
- (Person *(^)(int))eat{
return ^(int dun){
NSLog(@"吃了%d頓",dun);
return self;
};
}
- (Person *(^)(int))sleep{
return ^(int minute){
NSLog(@"又睡了%d分鐘",minute);
return self;
};
}
通過(guò)上面的寫法,person可以無(wú)限的調(diào)用eat以及sleep方法,因?yàn)檫@2個(gè)方法返回的都是person類本身劫侧,還可以傳入block的參數(shù)煞聪,我們還可以通過(guò)這個(gè)用法來(lái)修改對(duì)應(yīng)類的變量横漏,使之寫起來(lái)有種鏈?zhǔn)降母杏X穴吹,調(diào)用后:
Person *person = [Person new];
person.eat(10).sleep(20).eat(30).sleep(100);