Результат 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)

1 ответ

Проблема в том, что тип 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()
}
Другие вопросы по тегам