0

サーバーからの応答のヘッダーにある必要なリンクを解析しています。私のヘッダーは次のようになります

Access-Control-Allow-Origin → * Age → 0 Cache-Control → private,must-revalidate

接続→キープアライブ

Content-Encoding → gzip Content-Type → application/json

日付 → 2015 年 6 月 13 日(土) 15:58:56 GMT ETag → W/"cb38bb07f1635fd6aba5969985bf0607"

リンク → http://thisIsCurrentlink&limit=24 ; rel="次へ", http://thisIsLastlink&limit=24 ; rel="最後", http://thisIsFirstlink&limit=24 ; rel="最初",<>; rel="前"

サーバー → nginx

Vary → Accept-Encoding

X-Total-Count → 131

転送エンコーディング → チャンク

これにより、linksすべてのリンクを含む配列を取得できます

NSString *linkHeader = [(NSHTTPURLResponse *)operation.response  allHeaderFields][@"Link"];
NSArray *links = [linkHeader componentsSeparatedByString:@","];

次に、必要なすべてのリンクを取得するために次のことを行っています

RACSequence *sequence = [links.rac_sequence map:^id(NSString* item) {
                NSError *error;
                NSLog(@"item is %@",item);

                NSRegularExpression *regex  =   [NSRegularExpression regularExpressionWithPattern:@"<(.*)>" options:0 error:&error];
                NSString *actualLink;

                if (regex != nil) {
                    NSTextCheckingResult *result    =   [regex firstMatchInString:item
                                                                          options:0
                                                                            range:NSMakeRange(0, item.length)
                                                         ];
                    if (result) {
                        NSRange range    =   [result rangeAtIndex:1];
                        actualLink       =   [item substringWithRange:range];
                        NSLog(@"actualLink is %@",actualLink);

                        return [RACSequence return:actualLink];

                    }
                }
                return [RACSequence empty];

            }];

現在sequence、すべてのリンクが含まれています

http://thisIsCurrentlink&limit=24
http://thisIsLastlink&limit=24
http://thisIsFirsttlink&limit=24

私の質問は、上から各アイテムにアクセスするにはどうすればよいですかsequence

4

1 に答える 1

3

arrayRACSequence を配列に変換するメソッドを使用するだけです。

また、シーケンス内にシーケンスを作成する を使用する必要はありませんRACSequence return:。通常の文字列と nil を返し、配列として抽出する前に a のfilter後にmapすべての nil 値を削除します。

例:

NSArray *actualLinks = [[links.rac_sequence map:^id(NSString* item) {
            NSError *error = nil;
            NSLog(@"item is %@",item);

            NSRegularExpression *regex  =
            [NSRegularExpression regularExpressionWithPattern:@"<(.*)>" options:0 error:&error];
            NSString *actualLink = nil;

            if (regex != nil) {
                NSTextCheckingResult *result = [regex firstMatchInString:item
                                                                        options:0
                                                                        range:NSMakeRange(0, item.length)];
                if (result) {
                    NSRange range = [result rangeAtIndex:1];
                    actualLink = [item substringWithRange:range];
                    NSLog(@"actualLink is %@",actualLink);
                }
            }
            return actualLink;
        }] ignore:nil].array;
于 2015-06-13T23:04:50.423 に答える