Назад к задачам
Junior — Senior
7

Почему стоит реализовать протокол Equatable через расширение

Компании, где спрашивали:

SelectySelecty
Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

В Swift часто требуется, чтобы типы могли сравниваться на равенство. Одним из удобных способов добавить такое поведение является объявление соответствия протоколу Equatable в extension. При этом можно задать условие, при котором тип будет соответствовать протоколу только если его параметры тоже поддерживают Equatable. Ниже показан пример, где Result получает автоматическую реализацию оператора ==, если и тип Value, и тип Error являются сравнимыми.

extension Result: Equatable where Value: Equatable, Error: Equatable {
    static func == (lhs: Result, rhs: Result) -> Bool {
        switch (lhs, rhs) {
        case .success(let lhsVal), .succes(let rhsVal):
            return lhsVal == rhsVal
        case .failure(let lhsVal), .failure(let rhsVal):
            return lhsVal == rhsVal
        default:
            return false
        }
    }
}