RACSignal的使用基礎(chǔ)

獲得信號的方式

  • 單元信號

    RACSignal *signal1 = [RACSignal return:@"Some Value"];
    RACSignal *signal2 = [RACSignal error:errorObject];
    RACSignal *signal3 = [RACSignal empty];
    RACSignal *signal4 = [RACSignal never];
    
  • 動態(tài)信號

        RACSignal *signal5 = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
            [subscriber sendNext:@1];
            [subscriber sendNext:@2];
            [subscriber sendError:errorObject];
            [subscriber sendCompleted];
            return [RACDisposable disposableWithBlock:^{
                
            }];
        }];
    
  • Cocoa橋接

        RACSignal *signal6 = [view rac_signalForSelector:@selector(setFrame:)];
        RACSignal *signal7 = [view rac_signalForControlEvents:UIControlEventTouchUpInside];
        RACSignal *signal8 = [view rac_willDeallocSignal];
        RACSignal *signal9 = RACObserve(view, backgroundColor);
    
  • 信號轉(zhuǎn)換

        RACSignal *signal10 = [signal1 map:^id _Nullable(NSString *  _Nullable value) {
            return [value substringFromIndex:1];
        }];
    
  • 序列轉(zhuǎn)換

        RACSignal *signal11 = sequence.signal;
    

訂閱一個信號的方式

  • 訂閱方法

      [signal11 subscribeNext:^(id  _Nullable x) {
            NSLog(@"next value is %@", x);
        } error:^(NSError * _Nullable error) {
            NSLog(@"ops! Get some error: %@", error);
        } completed:^{
            NSLog(@"finish success");
        }];
    
  • 綁定

      RAC(view,backgroundColor) = signal10;
    
  • Cocoa橋接

         [view rac_liftSelector:@selector(convertPoint:toView:) withSignals:signal1,signal2, nil];
        [view rac_liftSelector:@selector(convertPoint:toView:) withSignalsFromArray:@[signal1,signal2]];
        [view rac_liftSelector:@selector(convertRect:toLayer:) withSignalOfArguments:signal5];
    

訂閱過程

 RACSignal *signal = [RACSignal createSignal:^RACDisposable * _Nullable(id<RACSubscriber>  _Nonnull subscriber) {
        [subscriber sendNext:@1];
        [subscriber sendNext:@2];
        [subscriber sendCompleted];
        return [RACDisposable disposableWithBlock:^{
            NSLog(@"disposed");
        }];
    }];
    
    RACDisposable *disposable = [signal subscribeNext:^(id  _Nullable x) {
        NSLog(@"next value is %@", x);
    } error:^(NSError * _Nullable error) {
        NSLog(@"Ops! Get some error:%@", error);
    } completed:^{
        NSLog(@"It finished");
    }];
    
    [disposable dispose];

元祖-RACTuple

  • RAC定義的一種數(shù)據(jù)類型
  • NSArray的簡化版
  • 其他語言中的意義
  • 使用
  RACTuple *tuple = RACTuplePack(@1, @"second");
    
    id first = tuple.first;
    id second = tuple.second;
    id last = tuple.last;
    
    id index2 = tuple[1];//second
    NSLog(@"%@", index2);
    
    RACTupleUnpack(NSNumber *num, NSString *str) = tuple;
    NSLog(@"num is %@", num); //num is 1
}

信號示例

信號示例.png

信號定義&&信號訂閱

信號訂閱與定義.png

單元信號圖示

單元信號.png

信號的變換和組合

信號的變換.png
信號的組合.png

單個信號的變換

單個信號的變換.png

對值操作

Map
map.png
MapReplace
map_replace.png
ReduceEach(只用于元祖)
reduce_each.png
其他
其他.png

對數(shù)量操作

Filter(減少數(shù)量)
filter.png
ignore(減少數(shù)量)
ignore.png
take(減少數(shù)量)
take.png
skip(減少數(shù)量)
skip.png
take&skip其他(減少數(shù)量)
take_skip.png
混合操作(減少數(shù)量)
混合操作.png
StartWith(增加數(shù)量)
start_with.png
Repeat(增加數(shù)量)
repeat.png
retry
retry.png
副作用操作
副作用操作.png
數(shù)量操作-collect
collect.png
數(shù)量操作-aggregate
aggregate.png
數(shù)量操作-scan
scan.png
aggregate && scan變種
agg_scan.png

時間操作-有用的信號

time_signal.png

時間操作-Delay

delay.png

時間操作-Throttle

throttle.png

時間操作-類似Throttle的方法

buffer.png

多個信號組合

  • 受那個信號終止而終止?
  • 錯誤傳遞
  • 各個信號何時開始訂閱?
concat
concat.png
merge
merge.png
merger運(yùn)用.png
組合操作--zip
zip.png

組合操作-combineLatest

combine_latest.png
組合操作- Zip&CombineLatest
zip_combinelatest.png
組合操作 - Sample
sample.png
組合操作--TakeUntil
take_until.png
組合操作--TakeUntilReplacement
take_until_replace.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容