Раньше я использовал ReactiveCocoa в Objective-C, но с тех пор перешел на RxSwift, поскольку мне было легче понять, чем RAC4. Однако есть кое-что, что я делал в RAC, что было полезно:
@weakify(self);
[[RACCommand alloc] initWithEnabled:RACObserve(self, valid) signalBlock:^RACSignal *(id input) {
@strongify(self);
return [[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
//make network call
//send responseObject to subscriber
[subscriber sendNext:responseObject];
[subscriber sendCompleted];
return nil;
}] materialize];
}];
Это позволило мне подписаться на команду для ее состояния выполнения, а также на ее сигналы выполнения, чтобы я мог наблюдать данные, возвращаемые из вызова.
Я не уверен, как воспроизвести это с помощью RxSwift Action. Я могу подписаться только на его выполняющуюся наблюдаемую:
var loader: NotificationType?
formButton.rx_action!.executing.subscribeNext({ [weak self] (executing) -> Void in
if executing {
loader = self?.showNotification(.Loading, title: self?.viewModel.loaderTitle.value, message: "Please wait".localized, timeout: -1)
}
else {
if let loader = loader {
loader.dismiss()
}
}
}).addDisposableTo(disposeBag)
Но затем мне нужно создать дополнительный PublishSubject
для отправки моих данных ответа:
viewModel.submitSubject.subscribe(onNext: { (response) -> Void in
print(response)
}, onError: { (error) -> Void in
print(error)
}, onCompleted: { () -> Void in
//completed
}) { () -> Void in
}.addDisposableTo(disposeBag)
Есть ли способ создать подобный шаблон в RxSwift с помощью Action?