4

とテキスト フィールドが一致するかどうかに基づいて有効になるReactiveCocoa Introductionの例 (言い換え) を考えてみましょう。.password.passwordConfirm

RAC(self.enabled) = [RACSignal 
    combineLatest:@[ RACAble(self.password), RACAble(self.passwordConfirm) ] 
    reduce:^(NSString *password, NSString *passwordConfirm) {
        return @([passwordConfirm isEqualToString:password]);
    }];

ここで、コンパイル時に結合するものの数と内容を認識し、「結合」配列をreduceブロックへの複数の引数に分解/マップすると便利ですそれがうまくいかないときはどうなりますか。たとえば、次のようにします。

RAC(self.enabled) = [RACSignal 
    combineLatest:arrayOfSignals 
    reduceAll:^(NSArray *signalValues) {  // made this up! don't try at home.
        // something ...
    }];

ReactiveCocoaでこれを行うにはどうすればよいですか?

更新: 受け入れられた回答のコメントは、私が見逃していたものを説明するのに役立ちます。

4

1 に答える 1

7

マップを使用できます:

RAC(self.enabled) = [[RACSignal combineLatest:arrayOfSignals]
                     map:^(RACTuple *signalValues) {
                       // something
                     }
                    ];

ARACTupleはさまざまな方法で操作でき、準拠しNSFastEnumerationallObjectsメソッドとメソッドを備えていrac_sequenceます。たとえば、すべてのブール値を次のように組み合わせることができます。

RAC(self.enabled) = [[RACSignal combineLatest:arrayOfSignals]
                     map:^(RACTuple *signalValues) {
                       return @([signalValues.rac_sequence all:^BOOL(NSNumber *value) {
                         return [value boolValue];
                       }]);
                     }
                    ];

それが役に立てば幸い。

于 2013-07-12T16:02:43.283 に答える