mike-neckのブログ

Java or Groovy or Swift or Golang

Swift の Result にあると良さそうな関数

Swift の Result をいじっていて、書いてしまった拡張関数

f:id:mike_neck:20180609045321p:plain


現在の値を消費して終わりの関数

extension Result {
  func doOn(success: (Success) -> Void, failure: (Failure) -> Void) {
    switch self {
    case .success(let value): success(value)
    case .failure(let error): failure(error)
    }
  }
}

現在の値が .success の場合にデバッグプリントするための関数

extension Result {
  func peek(_ action: (Success) -> Void) -> Result<Success, Failure> {
    let doNothing: () -> Void = {}
    switch self {
    case .success(let value): action(value)
    case .failure(_): doNothing()
    }
    return self
  }
}

現在の値が .failure の場合にデバッグプリントするための関数

extension Result {
  func peekError(_ action: (Failure) -> Void) -> Result<Success, Failure> {
    let doNothing: () -> Void = {}
    switch self {
    case .success(_): doNothing()
    case .failure(let error): action(error)
    }
    return self
  }
}