dispatch
軽量かつシンプルなSwiftのPromise実装です。
ベーシックな使い方
let promise = Promise<Int, Never> { resolve, reject in resolve(10) } promise .map{ $0 * 10 } .sink{ print($0) } // 100 let imageData = URLSession.shared.data(for: URL(string: "https://example.com/image.png)) imageData .sink{ print($0) }
Async・Awaitをサポートしています。
let dataPromsie = Promise<Int, Never> { resolve, reject in // download data } asyncHandler { await in let data = await | dataPromsie let image = await | UIImage.async(data: data) print(image.size) }
map
Outputをクロージャで変換します。
flatMap
クロージャの返り値のPromiseと連結します。
tryMap
throwsなクロージャを実行して失敗した場合は以降のPromiseを失敗にします。
tryFlatMap
mapError
Failureをクロージャで変換します。
replaceError
Failureを引数のOutputで置き換えます。
eraseToError
Failureの型をErrorに変換します。
eraseToVoid
Outputの方をVoidに変換します。
peek
Outputの場合にクロージャを実行します。以降にOperatorを接続することができます。
peekError
Failureの場合にクロージャを実行します。以降にOperatorを接続することができます。
sink
Outputの場合にクロージャを実行します。以降にOperatorを接続することができません。
catch
Failureの場合にクロージャを実行します。以降にOperatorを接続することができません。
let dataPromise: Promise<Data, Error> = ... dataPromise .map{ // 値の変換 } .peek{ // アクションの実行 } .catch{ // エラーのハンドリング }
asyncHandlerを用いることでAsync・Awaitを使用することができます。
asyncHandler
let dataPromise: Promise<Data, Error> = ... let intPromise: Promise<Int, Never> = ... let promise = asyncHandler { await in // promiseのawait let data = try await | dataPromise // FailureがNeverの場合はtryはいらない let int = await | intPromise return "Hello World" } // 返り値をOutput、投げられた例外をFailureとするPromiseになる
Promiseは通常は実行したQueueで実行されます。
別のQueueで実行したい場合はasyncを使います。
async
Promise.async{ resolve, reject in // 重い処理 ... resolve(result) } .receive(on: .main) // メインスレッドで受け取る .sink{ ... } // 実行処理
Combine
2つ以上のPromiseを組み合わせて全て成功した場合にタプルでOutputを返します。
let promise1 = Promise(...) let promise2 = Promise(...) promise1.combine(promise2) .sink{ ... } // 実行処理
CombineCollection
Promiseの配列を組み合わせて全て成功した場合に配列でOutputを返します。
let promises = [Promise](...) promises.combine() .sink{ ... } // 実行処理
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
Promise
軽量かつシンプルなSwiftのPromise実装です。
使い方
ベーシックな使い方
Async・Awaitをサポートしています。
Operators
mapOutputをクロージャで変換します。
flatMapクロージャの返り値のPromiseと連結します。
tryMapthrowsなクロージャを実行して失敗した場合は以降のPromiseを失敗にします。
tryFlatMapthrowsなクロージャを実行して失敗した場合は以降のPromiseを失敗にします。
mapErrorFailureをクロージャで変換します。
replaceErrorFailureを引数のOutputで置き換えます。
eraseToErrorFailureの型をErrorに変換します。
eraseToVoidOutputの方をVoidに変換します。
peekOutputの場合にクロージャを実行します。以降にOperatorを接続することができます。
peekErrorFailureの場合にクロージャを実行します。以降にOperatorを接続することができます。
sinkOutputの場合にクロージャを実行します。以降にOperatorを接続することができません。
catchFailureの場合にクロージャを実行します。以降にOperatorを接続することができません。
Operator接続の例
Async・Awaitの使用
asyncHandlerを用いることでAsync・Awaitを使用することができます。QueueとPromise
Promiseは通常は実行したQueueで実行されます。
別のQueueで実行したい場合は
asyncを使います。特殊なOperator
Combine2つ以上のPromiseを組み合わせて全て成功した場合にタプルでOutputを返します。
CombineCollectionPromiseの配列を組み合わせて全て成功した場合に配列でOutputを返します。