Swift 5结果:XCTASSERTEQUAL是模棱两可的,没有更多上下文



XCTAssertEqual produces an error: Expression type '()' is ambiguous without more context比较两个结果值(见下文(:

let success = Result<String, Error>.success("Value")
let failure = Result<String, Error>.failure(NSError.createError("Error"))
XCTAssertEqual(success, failure)

问题是您要比较的successfailure的类型不是Equatable

Result<Success, Failure>仅当SuccessFailure符合Equatable时,仅符合Equatable。从Result的定义:

extension Result : Equatable where Success : Equatable, Failure : Equatable {}

因此,您需要使用符合Equatable的自定义Error类型,或使用其他方法来通过提取成功(或失败(值来比较这两个值:

switch (a, b) {
case let (.success(x), .success(y)):
    XCTAssertEqual(x, y)
default:
    XCTFail()
}

相关内容

最新更新