【Swift/Combine】mapErrorメソッドの使い方!エラーを変換して流す方法
この記事からわかること
- SwiftのCombineフレームワークの使い方
- mapErrorメソッドとは?
- エラーを変換する方法
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
環境
- Xcode:15.0.1
- iOS:17.1
- Swift:5.9
- macOS:Sonoma 14.1
mapErrorメソッドの使い方
func mapError<E>(_ transform: @escaping (Self.Failure) -> E) -> Publishers.MapError<Self, E> where E : Error
SwiftのCombineフレームワークのmapError
メソッドは流れてきたエラーに対して新しいエラーに変換して再度流すことができるメソッドです。
使用方法を見てみます。myDivide
メソッドDivisionByZeroError
をスローする可能性のあるメソッドです。しかし実際に流れてくるエラーを別のMyGenericError
に変換したい場合にmapError
が活用できます。
struct DivisionByZeroError: Error {}
struct MyGenericError: Error { var wrappedError: Error }
/// 割り算をするメソッド
/// 0が渡された場合はエラーを投げる
func myDivide(_ dividend: Double, _ divisor: Double) throws -> Double {
guard divisor != 0 else { throw DivisionByZeroError() }
return dividend / divisor
}
let divisors: [Double] = [5, 4, 3, 2, 1, 0]
divisors.publisher
.tryMap { try myDivide(1, $0) }
.mapError { MyGenericError(wrappedError: $0) }
.sink(
receiveCompletion: { print ("completion: \($0)") },
receiveValue: { print ("value: \($0)", terminator: " ") }
)
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。