Hashable/Equatable/Comparable derivations
Let Swift synthesize Equatable/Hashable (and Codable) for simple structs/enums; implement custom Comparable (lexicographic) and manual hash(into:) when needed.
Hashable/Equatable/Comparable derivations is a free Swift Academy lesson on CoddyKit. This is lesson 3 of 3. Any 3 lessons of this learning path are free to read in full — after that, CoddyKit PRO unlocks every lesson, plus hands-on practice with a built-in code editor and a 24/7 AI tutor. It is part of the Swift Academy learning path, and your progress syncs across the web and the CoddyKit app. The Swift Academy course includes 3 lessons in total.
What gets synthesized?
Swift can synthesize common conformances for simple types:
- Equatable: value equality
- Hashable: dictionary/set keys
- Codable: encode/decode
Implement Comparable yourself (lexicographic) or rely on enum case order when applicable.
Synthesis for structs
For structs whose stored properties are Equatable/Hashable, Swift generates both automatically.
struct Point: Equatable, Hashable {
var x: Int
var y: Int
// No extra code: Equatable & Hashable are synthesized
}
let p1 = Point(x: 1, y: 2)
let p2 = Point(x: 1, y: 2)
print(p1 == p2) // true
let set: Set<Point> = [p1, p2] // Hashable works; duplicates coalesce
print(set.count) // 1Comparable for enums
An enum without associated values can get Comparable synthesis based on case order.
enum Priority: Comparable { case low, medium, high }
// Comparable is synthesized using case order: low < medium < high
print(Priority.low < .high) // trueComparable for structs
For structs, write < manually. A simple lexicographic comparison (last, then first) is common.
struct Person: Comparable, Hashable {
let last: String
let first: String
static func < (lhs: Person, rhs: Person) -> Bool {
if lhs.last != rhs.last { return lhs.last < rhs.last }
return lhs.first < rhs.first
}
}
let a = Person(last: "Doe", first: "Ana")
let b = Person(last: "Doe", first: "Max")
print(a < b) // true (Ana before Max)Custom equality & hashing
Write == and hash(into:) when equality/hash should ignore formatting (e.g., case, spaces).
struct FileID: Hashable, Equatable {
let path: String
// Normalize case/trim when hashing & comparing
static func == (l: FileID, r: FileID) -> Bool {
l.path.lowercased().trimmingCharacters(in: .whitespaces) ==
r.path.lowercased().trimmingCharacters(in: .whitespaces)
}
func hash(into hasher: inout Hasher) {
hasher.combine(path.lowercased().trimmingCharacters(in: .whitespaces))
}
}
let f1 = FileID(path: " Readme.md ")
let f2 = FileID(path: "readme.md")
print(f1 == f2) // true
print(Set([f1, f2]).count) // 1Best practices
Tips:
- Keep == and hash(into:) consistent: equal values must hash equally.
- Prefer synthesis first; go manual only for custom semantics.
- Document ordering rules for Comparable.
- Use enums without payloads when a simple ordered scale fits.
Synthesis checklist
Quick check: What can Swift synthesize automatically for simple structs/enums?
Recap
Recap: Let Swift synthesize Equatable/Hashable (and Codable) for simple models. Implement Comparable with clear lexicographic rules or rely on enum case order when possible.
Learn Swift with an AI tutor — free
Write and run real code in your browser, get instant help from a 24/7 AI tutor, and pick up where you left off on the web or in the app.
- Courses
- 122
- Lessons
- 409
Frequently Asked Questions
Is the “Hashable/Equatable/Comparable derivations” lesson free?
Yes — any 3 lessons of the Swift Academy learning path, including “Hashable/Equatable/Comparable derivations”, are free to read in full here on the web. After that, CoddyKit PRO unlocks every lesson, plus interactive practice with a built-in code editor and a 24/7 AI tutor. The Swift Academy course includes 3 lessons in total.
What will I learn in “Hashable/Equatable/Comparable derivations”?
Let Swift synthesize Equatable/Hashable (and Codable) for simple structs/enums; implement custom Comparable (lexicographic) and manual hash(into:) when needed. You practise Swift Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start Swift Academy?
No prior experience is required. Swift Academy on CoddyKit is structured for beginners through advanced learners, so you can start here or from the beginning and move at your own pace. This is lesson 3 of 3.
How long does the “Hashable/Equatable/Comparable derivations” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this Swift Academy lesson?
Yes. Every Swift Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- Operator overloading & precedence groups
- Subscripts & custom indices revisited
- Hashable/Equatable/Comparable derivations