RACSignal combineLatest:无法减少

RACSignal combineLatest: cannot reduce

我在尝试减少几个信号时遇到了一个可怕的编译问题。

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);
}];

我得到的错误是:

Cannot initialize a parameter of type 'id(^)()' with an rvalue of type 'id(^)(NSString* __strong, NSString* __strong)'

根据 ReactiveCocoa 的文档,我应该为组合块中的每个信号设置一些参数,但它似乎不起作用。

而且我不知道为什么这个东西需要一个没有参数的 reduce 块...

以前有人遇到过这个问题吗?

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

我最近听说在使用 Objective-C++ 时会发生此错误。无论您是否使用 objc++,请考虑使用 combineLatest:,然后使用 map:,可能会使用 RACTupleUnpack.

我知道它看起来很糟糕,但是当我使用 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);
}];