В
Swift протокол
Comparable позволяет сравнивать объекты с помощью операторов
<,
>,
<= и
>=. Это полезно для сортировки, поиска минимального / максимального значения и других операций.
Многие стандартные типы (Int, Float, String и др.) уже поддерживают
Comparable. Но если вы работаете со своими типами, их можно сделать сравниваемыми вручную.
Как добавить поддержку Comparable для своего типа:
struct MyStruct: Comparable {
let title: String
let count: Int
}
Но в отличие от
Equatable,
Swift не всегда может автоматически сгенерировать реализацию. Если свойства неоднозначны для сравнения (например, несколько полей), нужно реализовать методы сравнения вручную:
struct MyStruct: Equatable {
let title: String
let count: Int
static func < (lhs: MyStruct, rhs: MyStruct) -> Bool {
return lhs.count < rhs.count
}
static func > (lhs: MyStruct, rhs: MyStruct) -> Bool {
return lhs.count > rhs.count
}
static func <= (lhs: MyStruct, rhs: MyStruct) -> Bool {
return lhs.count <= rhs.count
}
static func >= (lhs: MyStruct, rhs: MyStruct) -> Bool {
return lhs.count >= rhs.count
}
}
Пример использования:
let firstStruct = MyStruct(title: "first", count: 1)
let secondStruct = MyStruct(title: "second", count: 2)
if firstStruct >= secondStruct {
print("firstStruct больше или равен")
} else {
print("firstStruct меньше")
}
После выполнения данного кода мы увидим следующий результат:
firstStruct меньше