ReactiveCocoa – RACSequence介紹

本文深入探讨了ReactiveCocoa中RACSequence类的使用方法,通过一个具体例子展示了如何利用RACSequence进行数组过滤与转换操作,以及与传统方式的对比。同时介绍了RACSequence中的filter和map方法,并提供了实际应用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.vincenttsai.com/reactivecocoa-racsequence/
ReactiveCocoa – RACSequence介紹

RactiveCocoa中很重要的兩個class,一個是RACSignal,一個是RACSequence,而這兩個class的super class就是RACStream。 RACSequence很類似Objective-C中的NSDictionary或者NSArray,你可以利用一些方法來達到將NSDictionary或者NSArray中的值進行一些過濾及轉換。

RACStream
以一個簡單的例子,我們欲將一個陣列,其內容有1-5,我們只要取出偶數的元素,而且要將值進行平方的動作。這是一般的寫法

1
2
3
4
5
6
7
8
9
10
11
12
     NSArray *numbers = @ [ @ ( 1 ) , @ ( 2 ) , @ ( 3 ) , @ ( 4 ) , @ ( 5 ) ] ;
     NSMutableArray *results = [ NSMutableArray array ] ;
     for ( NSNumber *value in numbers ) {
         //過濾掉奇數
         if ( [ value intValue ] % 2 != 0    ) { 
             continue ;
         }
         //取平方值後加入另一個array
         long square = [ value intValue ] * [ value intValue ] ;
         [ results addObject : @ ( square ) ] ; 
     }
     NSLog ( @"results = %@" , result ) ;

 

我們會利用RACStream中定義的其中兩個方法

1
2
- ( instancetype ) filter : ( BOOL ( ^ ) ( id value ) ) block ;  //過濾掉不要的值
- ( instancetype ) map : ( id ( ^ ) ( id value ) ) block ;  //將值進行轉換

這是利用RACSequence的寫法

1
2
3
4
5
6
7
8
9
10
11
12
13
     NSArray *numbers = @ [ @ ( 1 ) , @ ( 2 ) , @ ( 3 ) , @ ( 4 ) , @ ( 5 ) ] ;
     NSArray *result = [ [ [ [ numbers rac_sequence ]    //將NSArray轉成 RACSequence
         //filter方法可以過濾掉不要的值
       filter : ^ BOOL ( NSNumber *value ) {           
         //只留偶數,回傳YES,表示該值要留下
         return [ value intValue ] % 2 == 0 ;      
         //map可以將值再進行轉換
       } ] map : ^ id ( NSNumber *value ) {                 
         //將傳入的值平方
         long square = [ value intValue ] * [ value intValue ] ;
         return @ ( square ) ; 
       } ] array ] ;                     //將RACSequence轉成NSArray
     NSLog ( @"results = %@" , result ) ;                //Array中的值為 4,16

初次看起來括號會很怪,filter方法回傳為instancetype,也就是如果Receiver是RACSequence物件呼叫filter,就會回傳RACSequence物件(如果是RACSignal呼叫filter,也一樣是回傳一個RACSignal),這個回傳的RACSequence中就只剩兩個值,一個是2另一個是4,再針對這個Sequence呼叫map進行值的轉換,就可以取得最後的結果。這種利用functional programming的程式是否比較直覺我想見人見智,一開始我也不太習慣,但後來從程式閱讀的角度出發其實反而比較容易理解,在程式開發的過程中也會比較容易專心在開發程式的羅輯中。其餘的還有一些function,例如flattern及Concatenating,可以參考ReactiveCocoa Document

下次會主要分享RACSignal,這個才是最常用到的功能。如果你對ReactiveCocoa也有興趣,歡迎在下方留言一起交流。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值