RAC使用的一些小问题

2018-04-27  本文已影响17人  玩呀玩
    RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
        NSLog(@"sendNext");
        [subscriber sendNext:@{@"name":@"n",@"age":@"a"}];
        return nil;
    }];//模拟请求用户数据
    RACSignal *nameSignal = [signal flattenMap:^__kindof RACSignal * _Nullable(id  _Nullable value) {
        return [RACSignal return:[value objectForKey:@"name"]];
    }];
    RACSignal *ageSignal = [signal flattenMap:^__kindof RACSignal * _Nullable(id  _Nullable value) {
        return [RACSignal return:[value objectForKey:@"age"]];
    }];
    [nameSignal subscribeNext:^(id  _Nullable x) {
        NSLog(@"name %@",x);
    }];
    [ageSignal subscribeNext:^(id  _Nullable x) {
        NSLog(@"age %@",x);
    }];

这里会请求两遍 因为这个信号是冷信号

nameSiagnal和ageSiagnal被订阅的时候间接的对原信号进行订阅

避免这种情况需要把冷信号转换成热信号

RACSignal *signal = [[RACSignal getCurrentUserModel] replayLazily];

将冷信号转换为热信号的方法

- (RACMulticastConnection<ValueType> *)publish RAC_WARN_UNUSED_RESULT;

- (RACMulticastConnection<ValueType> *)multicast:(RACSubject<ValueType> *)subject RAC_WARN_UNUSED_RESULT;

- (RACSignal<ValueType> *)replay;

- (RACSignal<ValueType> *)replayLast;

- (RACSignal<ValueType> *)replayLazily;

具体使用:面向wiki编程 (Google,baidu,注释,wiki)

上一篇 下一篇

猜你喜欢

热点阅读