Derivasi Hashable/Equatable/Comparable
Biarkan Swift synthesize Equatable/Hashable (dan Codable) untuk struct/enum sederhana; implementasikan Comparable khusus (leksikografis) dan hash(into:) manual bila diperlukan.
Derivasi Hashable/Equatable/Comparable adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 3. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 3 pelajaran total.
Apa yang dihasilkan otomatis?
Swift dapat menghasilkan secara otomatis kesesuaian umum untuk tipe sederhana:
- Equatable: kesamaan nilai
- Hashable: kunci kamus/kumpulan
- Codable: penyandian/penguraian
Terapkan Comparable sendiri (secara leksikografis), atau manfaatkan urutan kasus enumerasi jika sesuai.
Sintesis untuk struktur
Untuk struktur yang properti tersimpannya bersifat Equatable/Hashable, Swift menghasilkan keduanya secara otomatis.
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 untuk enumerasi
Enumerasi tanpa nilai terkait dapat memperoleh sintesis Comparable berdasarkan urutan kasus.
enum Priority: Comparable { case low, medium, high }
// Comparable is synthesized using case order: low < medium < high
print(Priority.low < .high) // trueComparable untuk struktur
Untuk struktur, tulis < secara manual. Perbandingan leksikografis sederhana (last, lalu first) umum digunakan.
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)Kesamaan dan hashing khusus
Tulis == dan hash(into:) ketika kesamaan/hash harus mengabaikan pemformatan (misalnya, kapitalisasi dan spasi).
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) // 1Praktik terbaik
Kiat:
- Jaga konsistensi == dan hash(into:): nilai yang sama harus menghasilkan hash yang sama.
- Utamakan sintesis terlebih dahulu; gunakan cara manual hanya untuk semantik khusus.
- Dokumentasikan aturan pengurutan untuk Comparable.
- Gunakan enumerasi tanpa muatan ketika skala berurutan sederhana sudah memadai.
Daftar periksa sintesis
Pemeriksaan singkat: Apa saja yang dapat dihasilkan Swift secara otomatis untuk struktur/enumerasi sederhana?
Ringkasan
Ringkasan: Biarkan Swift menghasilkan Equatable/Hashable (serta Codable) untuk model sederhana. Terapkan Comparable dengan aturan leksikografis yang jelas, atau manfaatkan urutan kasus enumerasi jika memungkinkan.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Derivasi Hashable/Equatable/Comparable” gratis?
Ya — teks lengkap “Derivasi Hashable/Equatable/Comparable” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 3 pelajaran total.
Apa yang akan aku pelajari di “Derivasi Hashable/Equatable/Comparable”?
Biarkan Swift synthesize Equatable/Hashable (dan Codable) untuk struct/enum sederhana; implementasikan Comparable khusus (leksikografis) dan hash(into:) manual bila diperlukan. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Swift Academy?
Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 3.
Berapa lama pelajaran “Derivasi Hashable/Equatable/Comparable” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Overloading operator & kelompok precedence
- Subscript & indeks khusus, ditinjau kembali
- Derivasi Hashable/Equatable/Comparable