import RxSwift
import SVProgressHUD
extension ObservableType {
func withHUD(withStatus status: String? = nil) -> Observable<Self.E> {
return self.do(onNext: nil, onError: { _ in
SVProgressHUD.showError(withStatus: nil)
}, onCompleted: {
SVProgressHUD.showSuccess(withStatus: nil)
}, onSubscribe: nil, onSubscribed: {
SVProgressHUD.show(withStatus: status)
}, onDispose: {
SVProgressHUD.dismiss()
})
}
}
こんな感じにすると
Auth().authorize().withHUD().subscribe(onNext: {
//hoge
}).disposed(by: bag)
処理にwithHUDを書くだけで処理中に自動でHUDを出してくれる(と思う)
追記
ツッコミありがとうございます

MainSchedulerで動作させるのは明示的に書いたほうが良いかと思います。
追記2

Observable -> Observableとして実装bind(to binder: (Self) -> T) -> Tに渡す
なるほど!これならObservableの流れを元に副次的に動作していることが明示的に表現されています…!(勉強になりました)
追記3

bindした数だけHUDが発行される/Driverならshared/Schedulerの問題は解決する
SharedSequence/Driverにした時点でonErrorが取れなくなるので、今回の実装は出来ない気がしてきました。
ObservableTypeに対してextensionしてSharedSequenceを返す実装にして見るのが近い気もしますが、やっぱりschedulerとsharedの必要性を利用側の責任にするのは良い実装では無いですね…。