Результат Swift 5: XCTAssertEqual неоднозначен без дополнительного контекста - PullRequest
0 голосов
/ 11 мая 2019

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)

1 Ответ

2 голосов
/ 11 мая 2019

Проблема заключается в том, что тип success и failure, который вы пытаетесь сравнить, не Equatable.

Result<Success, Failure> соответствует Equatable только когда Success иFailure соответствует Equatable.Из определения Result:

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

Таким образом, вам нужно будет использовать пользовательский тип Error, который соответствует Equatable, или использовать другой способ для сравнения двух значений путем первого извлечениязначение успеха (или неудачи):

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