OC 函数式编程 (非原创 为了方便查找 所以设置为原创)

来源:互联网 发布:云创客淘宝采集软件 编辑:程序博客网 时间:2024/05/16 05:16
1. 函数式编程
#import "Person.h"

@implementation Person
#pragma mark - 链式编程 -
-(Person *)eat{
    
    NSLog(@"吃");
    
    return self;
}

-(Person *)drink{
    
    NSLog(@"喝");
    
    return self;
}

#pragma mark - 函数式编程 -
-(Person *(^)())eat1{
    
    Person * (^block)()=^{
        
        NSLog(@"吃1");
        
        return self;
    };
    
    return block;
}
//简便式写法
-(Person *(^)())drink1{
    
    return ^(){
        
        NSLog(@"喝1");
        
        return self;
    };
}

#pragma mark - 带有参数的函数式编程 -
-(Person *(^)(NSString *))eat2{
    
    Person * (^block)(NSString * food) = ^(NSString * food){
        
        NSLog(@"吃%@",food);
      
        return self;
    };
    
    return block;
}

//简便写法
-(Person *(^)(NSString *))drink2{
    
    return ^(NSString * drinkSth){
        
        NSLog(@"喝%@",drinkSth);
        
        return self;
    };

}

@end


调用 Person * person = [[Person alloc]init];
person.eat2(@"包子").drink2(@"水");



2.函数式编程

#import <Foundation/Foundation.h>

#import "CalculateManager.h"

@interface CalculateManager : NSObject

/** 用来存放相加的结果 */
@property (nonatomic, assign) NSInteger result;

//返回值为一个CalculateManager *(^)(NSInteger)类型的block
- (CalculateManager *(^)(NSInteger))add;

+ (NSInteger)why_makeCalculate: (void(^)(CalculateManager *))block;

@end

@implementation CalculateManager

- (CalculateManager *(^)(NSInteger))add {
    
    return  ^(NSInteger value) {
        _result += value;
        return self;
    };
}

+ (NSInteger)why_makeCalculate:(void(^)(CalculateManager *))block {
    
    CalculateManager *manager = [[CalculateManager alloc] init];
    block(manager);
    return manager.result;

@end


调用
    
    NSInteger value = [NSObject why_makeCalculate:^(CalculateManager *manager) {
        manager.add(5).add(5).add(5).add(10);
    }];
    
    NSLog(@"%zd", value);

原创粉丝点击