Оператор перегрузки эквивалентности (==) для пользовательского класса в Swift

Возможно ли перегрузить оператор эквивалентности (==) для пользовательского класса внутри этого пользовательского класса. Однако я знаю, что возможно, что этот оператор перегружен вне класса. Оцените любой пример кода. Спасибо заранее.

Ответы

Ответ 1

Добавить глобальные функции. Например:

class CustomClass {
    var id = "my id"
}

func ==(lhs: CustomClass, rhs: CustomClass) -> Bool {
    return lhs == rhs
}
func !=(lhs: CustomClass, rhs: CustomClass) -> Bool {
    return !(lhs == rhs)
}

Для соответствия Equatable protocol в Swift 2

class CustomClass: Equatable {
    var id = "my id"
}

func ==(left: CustomClass, right: CustomClass) -> Bool {
    return left.id == right.id
}

Для соответствия Equatable protocol в Swift 3

class CustomClass {
    var id = "my id"
}

extension CustomClass: Equatable {
    static func ==(lhs: CustomClass, rhs: CustomClass) -> Bool {
        return lhs.id == rhs.id
    }
}

Ответ 2

Нет, операторы перегружены с использованием глобальных функций.