Tag: 反应式编程

为什么在ReactiveCocoa中调用两次信号?

我正在实施我的第一个代码与https://github.com/ReactiveCocoa/ReactiveCocoa 。 是为了login一个用户。 该行[subscriber sendNext:user]; 被称为两次,但我希望只有一个。 而且地图根本不会被调用(所以自动login从不会被调用) 这是我的实现: -(RACSignal *) login:(NSString *)email pwd:(NSString *)pwd { DDLogInfo(@"Login user %@", email); RACSignal *login = [RACSignal createSignal:^ RACDisposable *(id<RACSubscriber> subscriber) { [PFUser logInWithUsernameInBackground:email password:pwd block:^(PFUser *user, NSError *error) { if (error) { [subscriber sendError:error]; } else { [subscriber sendNext:user]; [subscriber sendCompleted]; } }]; return nil; }]; [login map:^(PFUser […]

如何创build只接收一次信号的ReactiveCocoa订户,然后取消订阅/发布?

我目前正在注册一个属性信号的订户,如下所示: [RACAble(self.test) subscribeNext:^(id x) { NSLog(@"signal fired!"); }]; 默认的function是,它每触发一次self.test被改变,但我只想要它触发一次,然后取消订阅。 当我创build这个用户时,是否有一个“一次”参数或修饰符可以传递给RAC?

在ReactiveCocoa中链接相关的信号

在ReactiveCocoa中,如果我们链接几个依赖信号,我们必须使用subscribeNext:链中的下一个信号来接收生成的前一个信号的值(例如asynchronous操作的结果)。 所以一段时间后,代码变成这样的东西(不必要的细节被省略): RACSignal *buttonClickSignal = [self.logIn rac_signalForControlEvents:UIControlEventTouchUpInside]; [buttonClickSignal subscribeNext:^(UIButton *sender) { // signal from a button click // prepare data RACSignal *loginSignal = [self logInWithUsername:username password:password]; // signal from the async network operation [loginSignal subscribeNext:^void (NSDictionary *json) { // do stuff with data received from the first network interaction, prepare some new data RACSignal *playlistFetchSignal […]