您的位置:首页 > Web前端 > React

ReactiveCocoa – RACSequence介紹

2015-11-11 11:05 477 查看

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

Leave
a reply

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





以一個簡單的例子,我們欲將一個陣列,其內容有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也有興趣,歡迎在下方留言一起交流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: