การสร้าง Hashable/Equatable/Comparable
ให้ Swift synthesize Equatable/Hashable (และ Codable) สำหรับโครงสร้าง/เอนัมแบบง่าย ใช้ Comparable แบบกำหนดเอง (เรียงตามลำดับพจนานุกรม) และ hash(into:) แบบเขียนเองเมื่อจำเป็น
การสร้าง Hashable/Equatable/Comparable เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 3 บทเรียน
สิ่งใดถูกสร้างโดยอัตโนมัติ
Swift สามารถสร้างการสอดคล้องตามโปรโตคอลที่ใช้บ่อยให้กับชนิดข้อมูลแบบง่ายได้:
- Equatable: ความเท่ากันของค่า
- Hashable: คีย์ของพจนานุกรมหรือเซต
- Codable: การเข้ารหัสและถอดรหัส
คุณต้องเขียน Comparable เอง (โดยเปรียบเทียบตามลำดับพจนานุกรม) หรืออาศัยลำดับของเคส enum เมื่อเหมาะสม
การสร้างอัตโนมัติสำหรับโครงสร้าง
สำหรับโครงสร้างที่คุณสมบัติซึ่งจัดเก็บไว้มี Equatable/Hashable, Swift จะสร้างทั้งสองอย่างให้โดยอัตโนมัติ
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 สำหรับ enum
enum ที่ไม่มีค่าที่เชื่อมโยงสามารถได้รับการสร้าง Comparable โดยอิงตามลำดับของเคสได้
enum Priority: Comparable { case low, medium, high }
// Comparable is synthesized using case order: low < medium < high
print(Priority.low < .high) // trueComparable สำหรับโครงสร้าง
สำหรับโครงสร้าง ให้เขียน < ด้วยตนเอง การเปรียบเทียบแบบตามลำดับพจนานุกรมอย่างง่าย (last แล้วจึง first) เป็นรูปแบบที่ใช้กันทั่วไป
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)การเท่ากันและการแฮชแบบกำหนดเอง
เขียน == และ hash(into:) เมื่อการตรวจสอบความเท่ากันหรือค่าแฮชควรละเว้นรูปแบบการเขียน (เช่น ตัวพิมพ์เล็กใหญ่และช่องว่าง)
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) // 1แนวทางปฏิบัติที่ดี
เคล็ดลับ:
- ทำให้ == และ hash(into:) สอดคล้องกัน: ค่าที่เท่ากันต้องมีค่าแฮชเท่ากัน
- เลือกใช้การสร้างอัตโนมัติก่อน และเขียนเองเฉพาะเมื่อมีความหมายแบบกำหนดเอง
- เขียนเอกสารอธิบายกฎการจัดลำดับสำหรับ Comparable
- ใช้ enum ที่ไม่มีข้อมูลประกอบเมื่อมาตรวัดแบบมีลำดับอย่างง่ายเหมาะสม
รายการตรวจสอบการสร้างอัตโนมัติ
ตรวจสอบอย่างรวดเร็ว: Swift สามารถสร้างสิ่งใดให้กับโครงสร้างหรือ enum แบบง่ายได้โดยอัตโนมัติ
สรุป
สรุป: ให้ Swift สร้าง Equatable/Hashable (รวมถึง Codable) ให้กับแบบจำลองอย่างง่ายโดยอัตโนมัติ ใช้ Comparable พร้อมกฎการเปรียบเทียบตามลำดับพจนานุกรมที่ชัดเจน หรืออาศัยลำดับของเคส enum เมื่อทำได้
คำถามที่พบบ่อย
บทเรียน “การสร้าง Hashable/Equatable/Comparable” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การสร้าง Hashable/Equatable/Comparable” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 3 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การสร้าง Hashable/Equatable/Comparable”
ให้ Swift synthesize Equatable/Hashable (และ Codable) สำหรับโครงสร้าง/เอนัมแบบง่าย ใช้ Comparable แบบกำหนดเอง (เรียงตามลำดับพจนานุกรม) และ hash(into:) แบบเขียนเองเมื่อจำเป็น คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 3 บทเรียน
บทเรียน “การสร้าง Hashable/Equatable/Comparable” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การโอเวอร์โหลดตัวดำเนินการและกลุ่มลำดับความสำคัญ
- ทบทวนซับสคริปต์และดัชนีแบบกำหนดเอง
- การสร้าง Hashable/Equatable/Comparable