我正在研究Reactive Cocoa,我想知道为什么以后不能工作:
在B级我声明:
+(RACSubject*)importText{
RACSubject *subject = [RACSubject subject];
//1 block
NSArray *testArray = @[@"1",@"2",@"3"];
//2 block
[subject sendNext:[[[testArray rac_sequence] map:^id(NSString* value) {
return [value stringByAppendingString:@"More"];
}] array]];
return subject;
}
在A班:
[[SecondObject importText] subscribeNext:^(id x) {
NSLog(@"Output is %@", x);
}];
但是,控制台中没有任何输出。为什么呢?
答案 0 :(得分:1)
仔细研究importText
方法的作用。您首先创建了一个主题和临时数组。然后在任何其他事情发生之前,你只需要调用sendNext:...
来发送你临时创建的值但是还没有其他人没有订阅这个主题。最后,您的importText
方法返回SecondObject
将获得的主题,然后订阅它。
@interface SomeClass
@property (nonatomic, strong) RACSubject *subject;
@end
@implementation SomeClass
- (id)init
{
self = [super init];
if(self) {
self.subject = [RACSubject subject];
}
}
- (RACSubject *)rac_signalForImportText
{
return self.subject;
}
- (void)importText
{
NSArray *testArray = @[@"1",@"2",@"3"];
//2 block
[subject sendNext:[[[testArray rac_sequence] map:^id(NSString* value) {
return [value stringByAppendingString:@"More"];
}] array]];
}
SomeClass* Second = [SomeClass alloc] init];
[[Second rac_signalForImportText] subscribeNext:^(id x) {
NSLog(@"Output is %@", x);
}];
[Second importText];
我不确定为什么要以这种方式使用主题,但是在rac_signalForImportText
方法调用之前不会调用通知importText
,因为这是我使用主题调用的地方{ {1}}会触发sendNext
订阅的任何人。希望这有帮助。