美文网首页
RAC宏介绍

RAC宏介绍

作者: NextStepPeng | 来源:发表于2018-01-07 13:01 被阅读0次

    1、RAC::把一个对象的某个属性绑定一个信号,只要发出信号,就会把信号的内容给对象的属性赋值

    // 例如:给label的text属性绑定了文本框改变的信号

    RAC(self.label, text) =self.textField.rac_textSignal;

    //    [self.textField.rac_textSignal subscribeNext:^(id x) {

    //        self.label.text = x;

    //    }];

    2、RACObserve:快速的监听某个对象的某个属性改变

    /**

    *  KVO

    *  RACObserve:快速的监听某个对象的某个属性改变

    *  返回的是一个信号,对象的某个属性改变的信号

    */

    [RACObserve(self.view, center) subscribeNext:^(idx) {

    NSLog(@"%@", x);

    }];

    3、@weakify(self):解决循环引用问题

    /**

    *  循环引用问题

    */

    @weakify(self)

    RACSignal *signal = [RACSignal createSignal:^RACDisposable *(id subscriber) {

    @strongify(self)

    NSLog(@"%@",self.view);

    returnnil;

    }];

    _signal = signal;

    使用 @weakify(self)和@strongify(self)来避免循环引用

    解释:通过编译看下图,对比OC 传统的__weak 和@weakify(self) 其实是一样,好处是不需要像OC对待循环引用 一个个替换成 weakSelf,

    图一 图2

    4、RACTuple:元组

    /**

    * 元祖

    * 快速包装一个元组

    * 把包装的类型放在宏的参数里面,就会自动包装

    */

    RACTuple *tuple = RACTuplePack(@1,@2,@4);

    // 宏的参数类型要和元祖中元素类型一致, 右边为要解析的元祖。

    RACTupleUnpack_(NSNumber*num1,NSNumber*num2,NSNumber* num3) = tuple;// 4.元祖

    // 快速包装一个元组

    // 把包装的类型放在宏的参数里面,就会自动包装

    NSLog(@"%@ %@ %@", num1, num2, num3);

    RACTupleUnpack 宏,用来解析元组。

    他需要的参数就是 键、值,右边的x就是你需要进行处理的元组了:如下

    NSDictionary*dict =@{@"user":@"admin",@"age":@"20",@"gender":@"man"};

    RACSequence *sequence = dict.rac_sequence;RACSignal *signal = sequence.signal;

    [signal subscribeNext:^(idx) {

    //进行对数据的处理,如下}];

    //可以将上述代码转换如下

    [dict.rac_sequence.signal subscribeNext:^(idx) { RACTupleUnpack(NSString*key,NSString*value) = x;

    NSLog(@"%@-%@",key,value);

    }];

    相关文章

      网友评论

          本文标题:RAC宏介绍

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