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)
问题是您要比较的 success
和 failure
的类型不是 Equatable
。
当Success
和Failure
都符合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()
}
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)
问题是您要比较的 success
和 failure
的类型不是 Equatable
。
Success
和Failure
都符合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()
}