Добавить объявление

Протокол Equatable: как сравнивать пользовательские типы в Swift

В Swift протокол Equatable позволяет сравнивать объекты между собой с помощью оператора ==. Многие стандартные типы (например, String, Int, Float) уже соответствуют этому протоколу. Но если вы создаёте собственный тип, его нужно явно подписать под Equatable, чтобы включить сравнение.

Как добавить поддержку Equatable для своего типа:


Достаточно указать протокол после имени типа:

struct MyStruct: Equatable {
let title: String
let count: Int
}

Swift может автоматически сгенерировать реализацию ==, если все свойства типа тоже поддерживают Equatable (как в примере выше).

Но если логика сравнения сложнее, можно реализовать метод вручную:

struct MyStruct: Equatable {
let title: String
let count: Int

static func == (lhs: MyStruct, rhs: MyStruct) -> Bool {
return lhs.title == rhs.title && lhs.count == rhs.count
}
}

Пример использования:

let firstStruct = MyStruct(title: "first", count: 1)
let secondStruct = MyStruct(title: "second", count: 2)

if firstStruct == secondStruct {
print("Равно")
} else {
print("Не равно")
}

После выполнения данного кода мы увидим следующий результат:

Не равно
28.05.2025 16 355