Swift Academy · บทเรียน

Equatable ที่สังเคราะห์อัตโนมัติ

รับความสามารถในการใช้ == โดยอัตโนมัติ และปรับแต่งเมื่อจำเป็น

บทเรียน 1 จาก 413 ขั้นตอน

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"))  // true

Equatable ในโค้ดทั่วไป

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. Equatable ที่สังเคราะห์อัตโนมัติ
  2. Hashable และ hash(into:)
  3. Comparable และการเรียงลำดับ
  4. ความหมายความเท่ากันแบบกำหนดเอง
← กลับไปที่ Swift Academy