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
map
Outputをクロージャで変換します。
flatMap
クロージャの返り値のPromiseと連結します。
tryMap
throwsなクロージャを実行して失敗した場合は以降のPromiseを失敗にします。
tryFlatMap
throwsなクロージャを実行して失敗した場合は以降のPromiseを失敗にします。
mapError
Failureをクロージャで変換します。
replaceError
Failureを引数のOutputで置き換えます。
eraseToError
Failureの型をErrorに変換します。
eraseToVoid
Outputの方をVoidに変換します。
peek
Outputの場合にクロージャを実行します。以降にOperatorを接続することができます。
peekError
Failureの場合にクロージャを実行します。以降にOperatorを接続することができます。
sink
Outputの場合にクロージャを実行します。以降にOperatorを接続することができません。
catch
Failureの場合にクロージャを実行します。以降にOperatorを接続することができません。
Operator接続の例
Async・Awaitの使用
asyncHandler
を用いることでAsync・Awaitを使用することができます。QueueとPromise
Promiseは通常は実行したQueueで実行されます。
別のQueueで実行したい場合は
async
を使います。特殊なOperator
Combine
2つ以上のPromiseを組み合わせて全て成功した場合にタプルでOutputを返します。
CombineCollection
Promiseの配列を組み合わせて全て成功した場合に配列でOutputを返します。