Objective c 理解种族主题

Objective c 理解种族主题,objective-c,reactive-cocoa,Objective C,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(NSS

我正在研究反应性可可,我想知道为什么以下方法不起作用:

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

但是,控制台中没有任何输出。为什么?

请仔细查看
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\u signalforimportext
importext
方法调用之前不会被调用,因为在这里我使用主题调用
sendNext
,这将触发订阅
rac\u signalforimportext
的用户。希望这有帮助