2 RACCommands так, что один отключен, в то время как другой выполняется и наоборот

Как я могу создать 2 RACCommands так, что один отключен, а другой выполняется, и наоборот?

Вот так,

_prevTrackCommand = [[RACCommand alloc] initWithEnabled: [_nextTrackCommand.executing not] signalBlock:^RACSignal *(id _) {}];

_nextTrackCommand = [[RACCommand alloc] initWithEnabled: [_prevTrackCommand.executing not] signalBlock:^RACSignal *(id _) {}];

но этот код не будет работать как _nextTrackCommand является nil по сути _prevTrackCommand initilized.

1 ответ

Решение

Вы могли бы использовать RACSubject который может функционировать как RACSignal но позволяет вручную пересылать события:

RACSubject* commandAActive = [RACSubject subject];
RACSubject* commandBActive = [RACSubject subject];

RACCommand* commandA = [[RACCommand alloc] initWithEnabled:[commandBActive not]
                                        signalBlock:^RACSignal * _Nonnull(id  _Nullable input) {
    // block
}];
RACCommand* commandB = [[RACCommand alloc] initWithEnabled:[commandAActive not]
                                    signalBlock:^RACSignal * _Nonnull(id  _Nullable input) {
   // block
}];

[commandA.executing subscribeNext:^(NSNumber * _Nullable x) {
    [commandAActive sendNext:x];
}];
[commandB.executing subscribeNext:^(NSNumber * _Nullable x) {
    [commandBActive sendNext:x];
}];
Другие вопросы по тегам