RAC学习记录
先了RAC中的几个术语解释,链式、函数式、响应式
- 链式,用block作为函数的返回参数,并且block的返回值是对象本身
比如像如下调用 add(10).(5)
比较典型的框架masonry
在此,我用链式的方法写了一个计算器
.h文件
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface Calculation : NSObject
/**
加
*/
- (Calculation *(^)(int))add;
/**
减
*/
- (Calculation *(^)(int))sub;
/**
乘
*/
- (Calculation *(^)(int))muilt;
/**
除
*/
- (Calculation *(^)(int))divide;
@end
NS_ASSUME_NONNULL_END
@interface NSObject (Calculation)
+ (int)makeCalculation:(void(^)(Calculation *))calculation;
@end
.m文件
#import "Calculation.h"
@interface Calculation()
/** 结果 */
@property(nonatomic, assign) int result;
@end
@implementation Calculation
- (Calculation *(^)(int))add{
return ^Calculation *(int value){
_result += value;
return self;
};
}
- (Calculation * _Nonnull (^)(int))sub
{
return ^Calculation *(int value){
_result -= value;
return self;
};
}
- (Calculation * _Nonnull (^)(int))muilt
{
return ^Calculation *(int value){
_result *= value;
return self;
};
}
- (Calculation * _Nonnull (^)(int))divide
{
return ^Calculation *(int value){
_result /= value;
return self;
};
}
@end
@implementation NSObject (Calculation)
+ (int)makeCalculation:(void (^)(Calculation *))calculation{
Calculation *cal = [[Calculation alloc] init];
if (calculation) {
calculation(cal);
}
return cal.result;
}
@end
使用如下
int result = [NSObject makeCalculation:^(Calculation *make) {
make.add(10).add(20).sub(20).muilt(10);
}];
NSLog(@"-----:%d",result);
- 函数式 啥意思?
每个方法必须有返回值(本身对象),把函数或者Block当做参数,block参数(需要操作的值)block返回值(操作结果)
搞个demo体验下
网友评论