RAC学习记录(1)

RAC学习记录

先了RAC中的几个术语解释,链式、函数式、响应式

  1. 链式,用block作为函数的返回参数,并且block的返回值是对象本身
    比如像如下调用 add(10).(5)
    比较典型的框架 masonry
    在此,我用链式的方法写了一个计算器

.h文件

#import 

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);
  1. 函数式 啥意思?
    每个方法必须有返回值(本身对象),把函数或者Block当做参数,block参数(需要操作的值)block返回值(操作结果)
    搞个demo体验下

demo

你可能感兴趣的:(RAC学习记录(1))