我曾经在 Objective-C 中使用 ReactiveCocoa,但后来我改用 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 重现这一点。我只能订阅其执行的 observable:
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 创建类似的模式?