【发布时间】:2014-05-27 19:39:48
【问题描述】:
我不明白 ReactiveCocoa github 文档中以下示例中的 RACSignal 对象来自哪里。
Parallelizing independent work下,首先展示的是经典的objective-c版本:
__block NSArray *databaseObjects;
__block NSArray *fileContents;
NSOperationQueue *backgroundQueue = [[NSOperationQueue alloc] init];
NSBlockOperation *databaseOperation = [NSBlockOperation blockOperationWithBlock:^{
databaseObjects = [databaseClient fetchObjectsMatchingPredicate:predicate];
}];
很明显,[databaseClient fetchObjectsMatchingPredicate:predicate] 返回一个数组。但是,在响应式版本中:
RACSignal *databaseSignal = [[databaseClient
fetchObjectsMatchingPredicate:predicate] // <== this should also be an array
subscribeOn:[RACScheduler scheduler]]; // ,<== subscribeOn: is a RACSignal Method only
... 看起来相同的方法应该返回的不是数组(具有 rac_sequeance 属性)而是 RACSignal。
在这个例子中,是不是意味着RAC例子中的`databaseClient'类实际上是RACSignal的一个子类?或者,是否以某种方式创建的信号未显示?
当前运行带有 Reactive Cocoa 2.3 的 MacOS 10.9.3。文档来自 ReactiveCocoa 3.0 分支。
【问题讨论】:
-
不确定我是否同意标题编辑,它对答案的问题很大。
-
那么我可能误解了你的问题。你能澄清这个问题并重新命名吗?
-
为什么
fetchObjectsMatchingPredicate在顶部版本中返回一个数组,但在底部显然是一个信号?database在每个示例中是假定为同一个类还是两个不同的类,一个是为操作编写的,一个是为 RAC 编写的?文档说 RAC 示例只是非 RAC 版本的“清理和优化”版本,这对我来说意味着它在两个版本中是相同的类和方法。如果是这样,我不明白信号来自哪里。 -
这种类型的瘫痪是我真正需要从 RAC 获得的,所以我了解如何去做很重要。
-
我在下面更新了我的答案,以便在回答您的确切问题时更有帮助。认为类的 ReactiveCocoa 版本与非 ReactiveCocoa 版本完全不同。学习一下 OctoKit 源码可能会对你有所帮助,里面有很多这样的方法。
标签: objective-c cocoa reactive-cocoa