ReactiveCocoa-RACSequence與NSArray

ReactiveCocoa現(xiàn)在已經(jīng)是到5.X版本,2.X及以下適合OC項(xiàng)目,3.X適合Swift 1.X版本,4.X適合Swift 2.X 版本,5.X適合Swift 3.X版本,鑒于項(xiàng)目中OC代碼較多,暫時(shí)就根據(jù)最新的2.5進(jìn)行研究。ReactiveCocoa由兩大主要部分組成:signals (RACSignal) 和 sequences (RACSequence)。
signal 和 sequence 都是streams,他們共享很多相同的方法。ReactiveCocoa在功能上做了語(yǔ)義豐富、一致性強(qiáng)的一致性設(shè)計(jì):signal是push驅(qū)動(dòng)的stream,sequence是pull驅(qū)動(dòng)的stream。

Sequence是一種集合,很像 NSArray,但和數(shù)組不同的是,一個(gè)sequence里的值默認(rèn)是延遲加載的(只有需要的時(shí)候才加載),這樣的話如果sequence只有一部分被用到,那么這種機(jī)制就會(huì)提高性能。像Cocoa的集合類(lèi)型一樣,sequence不接受 nil值.RACSequence允許任意Cocoa集合在統(tǒng)一且顯式地進(jìn)行操作。

ReactiveCocoa導(dǎo)入

ReactiveCocoa可以通過(guò)下載直接添加到項(xiàng)目中,ReactiveCocoa本來(lái)不支持CocoaPods,開(kāi)源組織將其加入CocoaPods中,使用起來(lái)也很方便:

platform:ios,”8.0”
pod'ReactiveCocoa’,’2.5’ 

數(shù)組與序列

ReactiveCocoa中可以通過(guò)RACSequence對(duì)數(shù)組進(jìn)行操作,RACSequence繼承自RACStream,ReactiveCocoa中流的一種,我們可以對(duì)數(shù)組進(jìn)行map,filter,reduce,skip,take,contact..操作,簡(jiǎn)單操作其中的幾種:

    NSArray *array=@[@(2),@(5),@(7),@(15)];
    RACSequence *sequence = [array rac_sequence];
    id mapData = [sequence map:^id(id value) {
        return @([value integerValue] * 2);
    }];
    NSLog(@"序列Map之后的數(shù)據(jù):%@",[mapData array]);
    
    id filterData = [sequence filter:^BOOL(id value) {
        return [value integerValue]%2 == 0;
    }];
    NSLog(@"序列Filter之后的數(shù)據(jù):%@",[filterData array]);
    
    id reduceData = [sequence foldLeftWithStart:@"" reduce:^id(id accumulator, id value) {
        return [accumulator stringByAppendingString:[value stringValue]];
    }];
    NSLog(@"序列Left-Reduce之后的數(shù)據(jù):%@",reduceData);
    
    id rightReduceData = [sequence foldRightWithStart:@"" reduce:^id(id first, RACSequence *rest) {
       return [NSString stringWithFormat:@"%@%@", rest.head, first];
    }];
    NSLog(@"序列Right-Reduce之后的數(shù)據(jù):%@",rightReduceData);
    
    id skipData = [sequence skip:1];
    NSLog(@"序列Skip之后的數(shù)據(jù):%@",[skipData array]);
    
    
    id takeData = [sequence take:2];
    NSLog(@"序列Take之后的數(shù)據(jù):%@",[takeData array]);
    
    id takeUntilData = [sequence takeUntilBlock:^BOOL(id x) {
        return [x integerValue] == 7;
    }];
    NSLog(@"序列TakeUntil之后的數(shù)據(jù):%@",[takeUntilData array]);
    
    NSArray *nextArr = @[@"A",@"B",@"C"];
    RACSequence *nextSequence = [nextArr rac_sequence];
    id contactData = [sequence concat:nextSequence];
    NSLog(@"FlyElephant序列Contact之后的數(shù)據(jù):%@",[contactData array]);

小功能

我們可以通過(guò)流進(jìn)行創(chuàng)建數(shù)組,也可以通過(guò)數(shù)據(jù)進(jìn)行測(cè)試:

    BOOL result = [sequence any:^BOOL(id value) {
        return [value integerValue] > 10;
    }];
    NSLog(result ? @"array中有數(shù)字大于10" : @"array中沒(méi)有數(shù)字大于10");
    
    result = [array.rac_sequence all:^BOOL(id value) {
        return [value integerValue] < 24;
    }];
    NSLog(result?@"array中所有的數(shù)字小于24":@"數(shù)據(jù)中有數(shù)字大于24");
    
    RACSequence *customSequence = [RACSequence sequenceWithHeadBlock:^id{
        return @7;
    } tailBlock:^RACSequence *{
        return [@[@25] rac_sequence];
    }];
    NSLog(@"Head:%@--Tail:%@--Array:%@",customSequence.head,customSequence.tail,[customSequence array]);

參考鏈接
Reactive?Cocoa

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

相關(guān)閱讀更多精彩內(nèi)容

  • 1.ReactiveCocoa簡(jiǎn)介 ReactiveCocoa(簡(jiǎn)稱(chēng)為RAC),是由Github開(kāi)源的一個(gè)應(yīng)用于i...
    清蘂翅膀的技術(shù)閱讀 2,090評(píng)論 0 1
  • 關(guān)于ReactiveCocoa ReactiveCocoa是iOS環(huán)境下的一個(gè)函數(shù)式響應(yīng)式編程框架。函數(shù)式響應(yīng)式編...
    TeMortred閱讀 889評(píng)論 0 1
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,704評(píng)論 4 61
  • 好運(yùn)_2888閱讀 1,090評(píng)論 0 0
  • 這是知乎上面一個(gè)人的回答,搬到這里來(lái)、自學(xué)過(guò)程:主要是參考蕭大的編程入門(mén)指南進(jìn)行學(xué)習(xí) 哈佛公開(kāi)課:計(jì)算機(jī)科學(xué)CS5...
    阿基米德233閱讀 209評(píng)論 0 1

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