美文网首页
RAC学习记录(1)

RAC学习记录(1)

作者: 宋鸿康iOS | 来源:发表于2019-08-25 20:25 被阅读0次

    RAC学习记录

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

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

    demo

    相关文章

      网友评论

          本文标题:RAC学习记录(1)

          本文链接:https://www.haomeiwen.com/subject/ljpkectx.html