Avatar
enum MyError: Error { case notEven } func f(_ a: Int) -> Result<Int, Error> { a % 2 == 0 ? .success(a) : .failure(MyError.notEven) } func assert<T: Equatable, E>(_ r: Result<T, E>, success: T) { switch r { case .success(let value): XCTAssertEqual(value, success) default: XCTFail() } } func assert<T, E: Error & Equatable>(_ r: Result<T, Error>, failure: E) { switch r { case .failure(let value): XCTAssertEqual(value as? E, failure) default: XCTFail() } } func test() { assert(f(2), success: 2) assert(f(1), failure: MyError.notEven) }
2:31 AM
できた
2:31 AM
なんでできなかったんだ...
2:32 AM
as? が消える分、failure: Failure? を使うより綺麗だなあ (edited)