Equatable ที่สังเคราะห์อัตโนมัติ
รับความสามารถในการใช้ == โดยอัตโนมัติ และปรับแต่งเมื่อจำเป็น
Equatable ที่สังเคราะห์อัตโนมัติ เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
Equatable คืออะไร
Equatable คือโปรโตคอลที่ทำให้ชนิดข้อมูลมีตัวดำเนินการ == การทำให้สอดคล้องกับโปรโตคอลนี้ช่วยให้คุณเปรียบเทียบค่าทั้งสองค่าเพื่อดูว่าเท่ากันหรือไม่ และใช้ค่าดังกล่าวกับ contains, firstIndex และอื่น ๆ ได้
การทำให้สอดคล้องโดยอัตโนมัติ
สำหรับโครงสร้างที่คุณสมบัติที่จัดเก็บไว้ทั้งหมดเป็น Equatable, Swift จะสร้าง == ให้โดยอัตโนมัติ เพียงประกาศการทำให้สอดคล้องกับโปรโตคอล:
struct Point: Equatable {
let x: Int
let y: Int
}
print(Point(x: 1, y: 2) == Point(x: 1, y: 2)) // true
print(Point(x: 1, y: 2) == Point(x: 9, y: 2)) // falseการสังเคราะห์ทำงานอย่างไร
== ที่สร้างขึ้นจะเปรียบเทียบคุณสมบัติที่จัดเก็บไว้ทุกคู่ ค่าทั้งหมดต้องเท่ากัน ค่าทั้งสองค่าจึงจะถือว่าเท่ากัน:
struct User: Equatable {
let name: String
let age: Int
}
let a = User(name: "Ann", age: 30)
let b = User(name: "Ann", age: 31)
print(a == b) // false (age differs)การใช้ == กับคอลเลกชัน
Equatable ช่วยให้ใช้การดำเนินการกับอาร์เรย์ได้มากมาย:
struct Tag: Equatable { let name: String }
let tags = [Tag(name: "a"), Tag(name: "b")]
print(tags.contains(Tag(name: "b"))) // true
print(tags.firstIndex(of: Tag(name: "a"))!) // 0อีนัมก็เป็น Equatable ได้เช่นกัน
อีนัมจะได้รับการสังเคราะห์ Equatable เช่นกัน อีนัมที่ไม่มีค่าที่แนบมาจะเป็น Equatable ได้แม้ไม่ประกาศโปรโตคอลนี้ ส่วนอีนัมที่มีค่าที่แนบมาต้องประกาศการทำให้สอดคล้อง และค่าที่แนบมาจะถูกนำมาเปรียบเทียบด้วย
อีนัม Equatable ที่มีค่าที่แนบมา
ค่าที่แนบมาจะมีส่วนร่วมในการเปรียบเทียบ:
enum Status: Equatable {
case active
case error(code: Int)
}
print(Status.error(code: 404) == Status.error(code: 404)) // true
print(Status.error(code: 404) == Status.error(code: 500)) // falseชนิดข้อมูลซ้อนกัน
การสังเคราะห์สามารถประกอบต่อกันได้ ดังนั้นโครงสร้างที่มีสมาชิกเป็น Equatable ก็สามารถสังเคราะห์ได้เช่นกัน:
struct Line: Equatable {
let start: Int
let end: Int
}
struct Shape: Equatable {
let lines: [Line]
}
print(Shape(lines: [Line(start: 0, end: 1)]) == Shape(lines: [Line(start: 0, end: 1)])) // trueเมื่อการสังเคราะห์ทำไม่ได้
หากคุณสมบัติที่จัดเก็บไว้รายการใดรายการหนึ่งไม่เป็น Equatable การสังเคราะห์จะใช้ไม่ได้ และคุณต้องเขียน == เอง (จะกล่าวถึงในภายหลัง):
struct Box: Equatable {
let id: Int
static func == (l: Box, r: Box) -> Bool { l.id == r.id }
}
print(Box(id: 1) == Box(id: 1)) // trueคลาสไม่สังเคราะห์โดยอัตโนมัติ
ชนิดข้อมูลแบบอ้างอิงจะไม่รับ == ที่สังเคราะห์โดยอัตโนมัติ คุณต้องนำไปใช้งานเอง (โดยเปรียบเทียบเอกลักษณ์หรือฟิลด์):
final class Account: Equatable {
let id: Int
init(id: Int) { self.id = id }
static func == (l: Account, r: Account) -> Bool { l.id == r.id }
}
print(Account(id: 7) == Account(id: 7)) // trueมี != ให้โดยอัตโนมัติ
เมื่อมี == แล้ว != จะถูกสร้างขึ้นโดยอัตโนมัติในฐานะค่าตรงข้าม:
struct Color: Equatable { let hex: String }
print(Color(hex: "#fff") != Color(hex: "#000")) // trueEquatable ในโค้ดทั่วไป
Equatable ช่วยให้ฟังก์ชันทั่วไปเปรียบเทียบสมาชิกได้ อัลกอริทึมจำนวนมากต้องใช้ความสามารถนี้:
func allSame<T: Equatable>(_ xs: [T]) -> Bool {
guard let first = xs.first else { return true }
return xs.allSatisfy { $0 == first }
}
print(allSame([2, 2, 2])) // true
print(allSame(["a", "b"])) // falseตรวจสอบความเข้าใจอย่างรวดเร็ว
สำหรับชนิดข้อมูลใด Swift จะสังเคราะห์ == โดยอัตโนมัติเมื่อคุณประกาศ Equatable?
สรุป
คุณได้เรียนรู้เกี่ยวกับ Equatable:
Equatableมี==ให้ใช้ (และมี!=ให้โดยอัตโนมัติ)- โครงสร้างและอีนัมที่มีสมาชิกเป็น Equatable จะได้รับ
==ที่สังเคราะห์ขึ้น - ทำให้ใช้
contains,firstIndex(of:)และอื่น ๆ ได้ - คลาสและสมาชิกที่ไม่เป็น Equatable ต้องเขียน
==เอง
ถัดไป: Hashable
เรียนรู้ Swift ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 122
- บทเรียน
- 409
คำถามที่พบบ่อย
บทเรียน “Equatable ที่สังเคราะห์อัตโนมัติ” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “Equatable ที่สังเคราะห์อัตโนมัติ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “Equatable ที่สังเคราะห์อัตโนมัติ”
รับความสามารถในการใช้ == โดยอัตโนมัติ และปรับแต่งเมื่อจำเป็น คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “Equatable ที่สังเคราะห์อัตโนมัติ” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Equatable ที่สังเคราะห์อัตโนมัติ
- Hashable และ hash(into:)
- Comparable และการเรียงลำดับ
- ความหมายความเท่ากันแบบกำหนดเอง