Swift 5 结果:XCTAssertEqual 在没有更多上下文的情况下不明确

Swift 5 Result: XCTAssertEqual is ambiguous without more context

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

SuccessFailure都符合Equatable时,

Result<Success, Failure>才符合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()
}