Рассмотрим пример (переоформленную) из ReactiveCocoa Introduction, который позволяет в зависимости от того совпадают .password
и .passwordConfirm
текстовые поля:RACSignal: как уменьшить на сколь угодно большой объединить
RAC(self.enabled) = [RACSignal
combineLatest:@[ RACAble(self.password), RACAble(self.passwordConfirm) ]
reduce:^(NSString *password, NSString *passwordConfirm) {
return @([passwordConfirm isEqualToString:password]);
}];
Здесь мы знаем, во время компиляции хау многие и то, что мы объединяем, и полезно разрушить/сопоставить массив «комбинировать» с несколькими аргументами в блок уменьшения. Как насчет того, когда это не сработает. Например, если вы хотите:
RAC(self.enabled) = [RACSignal
combineLatest:arrayOfSignals
reduceAll:^(NSArray *signalValues) { // made this up! don't try at home.
// something ...
}];
Как вы это делаете с ReactiveCocoa?
ОБНОВЛЕНИЕ: комментарии принятого ответа помогают объяснить, что мне не хватает.
Спасибо. У меня есть «карта:» для работы. Терминология меня отбрасывает. На мой взгляд, обобщенная идея карты состоит в том, что она сохраняет мощность. Если я могу отобразить из объединенного «RACSignal» в одно значение, значит ли это, что его мощность равна 1? Если это так, метод 'combLatest: reduce:', который уменьшает несколько значений, кажется немного мутным. –
'+ combLatest:' создает кортежи, поэтому да, вы можете сказать, что он имеет мощность 1. Вариант 'reduce' распаковывает кортеж и передает индивидуальные значения кортежа в блок' reduce'. '+ combinationLatest: reduce:' является удобным способом для выполнения двух отдельных операций: '+ combinationLatest:', за которым следует '-reduceEach:'. Помогает ли это объяснить это? –
@DaveLee: * очень * прозрачный, спасибо. –