На этот раз про
Equatable и Comparable.Вещи знакомые, но на практике ими часто пользуются по инерции, не всегда задумываясь, чем они отличаются.
🔹
Equatable отвечает ровно на один вопрос:равны ли два значения между собой.
struct User: Equatable {
let id: Int
let name: String
}Теперь можно:
• сравнивать
user1 == user2• использовать
removeDuplicates()• помогать SwiftUI понимать, изменилось ли состояние
Где это обычно нужно:
• модели данных
• state в SwiftUI
• тесты
Важно:
Equatable ничего не говорит про порядок. Только одинаковые значения или нет.🔹
Comparable нужен тогда, когда элементы можно упорядочить.struct Score: Comparable {
let value: Int
static func < (lhs: Score, rhs: Score) -> Bool {
lhs.value < rhs.value
}
}После этого можно:
• сортировать массивы
• использовать
min() и max()• работать с диапазонами
scores.sorted()
scores.max()
Важный момент:
если тип
Comparable, он автоматически обязан быть Equatable.Если мы умеем сравнивать порядок, мы обязаны понимать равенство.
🔹 В проектах нередко встречается:
•
Comparable, хотя сортировка нигде не используется• сложная логика сравнения «на будущее»
• протоколы, добавленные просто на всякий случай
На практике это редко даёт пользу и чаще усложняет модель.
🍕
Equatable и Comparable решают разные задачи, и в большинстве случаев достаточно минимально необходимого протокола.Иногда полезно просто спросить себя:
я хочу проверить равенство или действительно упорядочить данные?
Ответ на этот вопрос часто делает модель и код вокруг неё заметно проще.
#R #Swift #SwiftUI
👏
