2015-03-06 2 views
0

У меня есть ужасная проблема с компиляцией при попытке уменьшить пару сигналов.RACSignal combinationLatest: не может уменьшить

RACSignal* contactIdentifierSignal = RACObserve(self, contactIdentifier); 
RACSignal* displayNameSignal = RACObserve(self, displayName); 

RACSignal* mappedThing = [RACSignal combineLatest:@[contactIdentifierSignal, displayNameSignal] reduce:^id(NSString* identifierValue, NSString* displayNameValue){  
    return @([identifierValue length] > 0 && [displayNameValue length] > 0); 
}]; 

ошибка, что я получаю:

Невозможно инициализировать параметр типа 'ид (^)()' с RValue типа «ид (^) (NSString * __strong, NSString * __strong)»

enter image description here

Согласно документации ReactiveCocoa, я должен иметь ряд Params для каждого сигнала в блоке комбайна k, но, похоже, это не работает.

И я понятия не имею, почему эта вещь ожидает, что свертка блок без параметров ...

Есть кто-нибудь сталкивался с этой проблемой раньше?

https://github.com/ReactiveCocoa/ReactiveCocoa/blob/master/Documentation/BasicOperators.md#combining-latest-values

+0

Я пробовал этот код и компилируется (ReactiveCocoa 2.4.7, Xcode 6.1.1),. Вы уверены, что проблема не в другом месте вашего кода? Например. что-то не так с импортом, или некоторые макросы препроцессора перепутали вещи? –

+0

@ MichałCiuba Я думаю, что я забыл сказать, что я внутри файла ObjectiveC++ ... –

ответ

1

Я знаю, что это выглядит ужасно, но поскольку я использую Objective-C++, эта вещь сходит с ума.

Я решаю эту вещь, отбрасывая ее до id, и это работает ... не спрашивайте меня, почему.

RACSignal* contactIdentifierSignal = RACObserve(self, contactIdentifier); 
RACSignal* displayNameSignal = RACObserve(self, displayName); 

RACSignal* mappedThing = [RACSignal combineLatest:@[contactIdentifierSignal, displayNameSignal] reduce:(id)^id(NSString* identifierValue, NSString* displayNameValue){  
    return @([identifierValue length] > 0 && [displayNameValue length] > 0); 
}]; 
0

я слышал в последнее время эта ошибка возникает при использовании Objective-C++. Если вы используете objC++ или нет, подумайте об использовании combineLatest:, а затем map:, вероятно используя RACTupleUnpack.

+0

Да, я использую объективный C++ –

Смежные вопросы