SwiftのOptionalをResultにするExtension書いたのでメモ。
Resultはこのライブラリを入れてます
実装
import Result extension Optional { func toResult<E: Error>(error: E) -> Result<Wrapped, E> { guard let value = self else { return .failure(error) } return .success(value) } }
テストコード
class OptionalExtensionTests: XCTestCase { func testToResult() { enum MockError: Error { case mock } let someString: String? = "hoge" let expectRight = someString.toResult(error: MockError.mock) XCTAssertEqual(expectRight, .success("hoge")) let noneString: String? = nil let expectLeft = noneString.toResult(error: MockError.mock) XCTAssertEqual(expectLeft, .failure(MockError.mock)) } }
SwiftのOptionは色々足りてない感あるけど、この方(↓)の書いたExtensionと↑を入れとけば大分使いやすくなる、、と思う。
Eitherがないの違和感しかないんだけど、いつか入るんだろうか