#函数式、链式语法
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
/** 传统写法 */
- (void)eat;
- (void)sleep;
/** 使用‘[]’连续调用 */
- (Person *)eat1;
- (Person *)sleep1;
/** 使用‘()’函数式编程,block实现 */
- (void(^)(void))eat2;
- (void(^)(void))sleep2;
/** 使用函数式 + 链式 无参 */
- (Person *(^)(void))eat3;
- (Person *(^)(void))sleep3;
/** 函数式 + 链式 带参 */
- (Person * (^)(NSString *foodName))eat4;
- (Person * (^)(NSInteger hour))sleep4;
@end
Person.m
#import "Person.h"
@implementation Person
#pragma mark - 传统写法,单独调用,不能任意顺序组合
- (void)eat {
NSLog(@"%s",__func__);
}
-(void)sleep {
NSLog(@"%s",__func__);
}
#pragma mark - 使用‘[]’实现连续调用
- (Person *)eat1 {
NSLog(@"%s",__func__);
return self;
}
-(Person *)sleep1{
NSLog(@"%s",__func__);
return self;
}
#pragma mark - 使用‘()’函数式编程,block实现
-(void (^)(void))eat2 {
//定义block
void (^eat2Block)(void) = ^ {
NSLog(@"%s",__FUNCTION__);
};
return eat2Block;
}
-(void (^)(void))sleep2 {
//定义block
void (^sleep2Block)(void) = ^ {
NSLog(@"%s",__FUNCTION__);
};
return sleep2Block;
}
#pragma mark - 使用函数式 + 链式 无参
-(Person *(^)(void))eat3{
Person *(^eat3Block)(void) = ^{
NSLog(@"%s",__FUNCTION__);
return self;
};
return eat3Block;
}
-(Person *(^)(void))sleep3{
Person *(^sleep3Block)(void) = ^{
NSLog(@"%s",__FUNCTION__);
return self;
};
return sleep3Block;
}
#pragma mark - 函数式 + 链式 带参
- (Person *(^)(NSString *))eat4
{
Person * (^eat4Block)(NSString *) = ^(NSString *foodName) {
NSLog(@"这个人吃了: %@",foodName);
return self;
};
return eat4Block;
}
//上下两种写法一样
- (Person *(^)(NSInteger))sleep4
{
return ^(NSInteger hour) {
NSLog(@"然后睡了%ld小时",(long)hour);
return self;
};
}
@end