函数式编程思想 : 就是将操作尽可能的 写在一起 写成一个嵌套的函数;
就是往方法里边传入block,方法中嵌套block调用.
比如之前的加法管理者案例:
先创建一个SumManager
简单应用:
1.定义一个方法:
SumManager.h
- (void)manager:(void(^)())sumBlock;
2.实现这个方法:
SumManager.m
- (void)manager:(void(^)())sumBlock{
sumBlock();
}
3.外界使用:
viewController.m
SumManager *mgr = [[SumManager alloc]init];
[mgr manager:^() {
NSLog(@"代码块写在这里");
}];
实际应用
1.定义一个方法、定义一个属性:
SumManager.h
#import <Foundation/Foundation.h>
@interface SumManager : NSObject
/** */
@property (nonatomic,assign) int result;
//计算
- (instancetype)manager:(int(^)(int result))sumBlock;
@end
2.实现返回对象:
SumManager.m
#import "SumManager.h"
@implementation SumManager
//计算
- (instancetype)manager:(int(^)(int result))sumBlock{
//实现block的操作之后把值保存起来
_result = sumBlock(_result);
//把自己返回去,通过对象取出自己的属性result的值
return self;
}
@end
3.使用:
ViewController.m
#import "ViewController.h"
#import "SumManager.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
SumManager *mgr = [[SumManager alloc]init];
int result = [[mgr manager:^int(int result) {
//
result += 10;
result *= 2;
return result;
}] result];
//这个block执行完毕将计算完成的结果保存起来,返回的是manager本身,此时使用点语法就可以将属性的值取出了。
/*
int result = [mgr manager:^int(int result) {
//
result += 10;
result *= 2;
return result;
}].result;
*/
NSLog(@"result == %d",result);
}
NSLog:
2017-06-21 15:31:33.311 函数式编程[16804:3255310] result == 20