Sobes.tech
Back to tasks
Junior — Senior
52

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

Companies where asked:

SelectySelecty
Get help with live coding in real time with Sobes Copilot
Task condition

В 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
        }
    }
}