完成可能

完成可能

Completableは、Observableの特別なバージョンです。複数の要素を出力できるObservableとは異なり、完了したイベントまたはエラーイベントのみを生成できます。

  • ゼロ要素を放出
  • 完了したイベントまたはエラーイベントを発行する
  • 追加の効果を共有しない

Completableは、タスクの完了のみを気にし、タスクの戻り値を気にする必要がない状況に適しています。Observableに似ています。

  • Completableを作成する方法

Completableの作成は、Observableの作成と非常に似ています。

func cacheLocally() -> Completable {
    return Completable.create { completable in
       // Store some data locally
       ...
 ...   guard success else {  completable(.error(CacheError.failedCaching))  return Disposables.create {}  }   completable(.completed)  return Disposables.create {}  } } 

次のようにCompletableを使用できます。

cacheLocally()
    .subscribe(onCompleted: {
        print("Completed with no error")
    }, onError: { error in
 print("Completed with an error: \(error.localizedDescription)")  })  .disposed(by: disposeBag)

この通話も使用できます

以使用如下方式使用这个 Completable:

cacheLocally()
    .subscribe { completable in
 switch completable {  case .completed:  print("保存成功!")  case .error(let error):  print("保存失败: \(error.localizedDescription)")  }  }  .disposed(by: disposeBag)

サブスクリプションは、CompletableEventの列挙を提供します。

public enum CompletableEvent {
    case error(Swift.Error)
    case completed
}
  • completed-完了したイベントを生成します
  • エラーを発生させる

多分

たぶん、Observableの特別なバージョンでしょう。SingleとCompletableの間で、1つのエレメントのみを発行するか、completedイベントを生成するか、エラーイベントを生成できます。

  • 要素、完了したイベント、またはエラーイベントを発行する
  • 追加の効果を共有しない

要素を放出する必要があり、放出する必要がない場合は、Maybeを使用できます。

  • Maybeの作成方法Maybeの作成は、Observableの作成と非常に似ています。
func generateString() -> Maybe<String> {
    return Maybe<String>.create { maybe in
        maybe(.success("RxSwift"))

 // OR   maybe(.completed)   // OR   maybe(.error(error))   return Disposables.create {}  } }

多分このように使用できます:

generateString()
    .subscribe(onSuccess: { element in
        print("Completed with element \(element)")
    }, onError: { error in
 print("Completed with an error \(error.localizedDescription)")  }, onCompleted: {  print("Completed with no element")  })  .disposed(by: disposeBag)

Observableで.asMaybe()メソッドを呼び出して、それをMaybeに変換することもできます。

おすすめ

転載: www.cnblogs.com/liuxiaokun/p/12682214.html