0Pricing
Swift Academy · บทเรียน

การสอดคล้องแบบมีเงื่อนไข

ทำให้ชนิดเจเนอริกสอดคล้องกับโปรโตคอล เฉพาะเมื่อ พารามิเตอร์ชนิดตรงตามข้อจำกัด (เช่น Box<T>: Equatable where T: Equatable )

การสอดคล้องแบบมีเงื่อนไข เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 3 บทเรียน

เหตุใดจึงต้องมีการสอดคล้องแบบมีเงื่อนไข

การสอดคล้องแบบมีเงื่อนไขจะเพิ่มการสอดคล้องตามโปรโตคอลเฉพาะเมื่อพารามิเตอร์ชนิดข้อมูลตรงตามข้อจำกัด วิธีนี้ช่วยให้ส่วนเชื่อมต่อโปรแกรมแม่นยำ ลดโค้ดซ้ำซ้อน และทำงานร่วมกับไลบรารีมาตรฐานได้อย่างทรงพลัง

พื้นฐานของชนิดข้อมูลทั่วไป

เริ่มต้นด้วยชนิดข้อมูลทั่วไป หากไม่ทำงานเพิ่มเติม Box จะไม่สอดคล้องตาม Equatable/Hashable แม้ว่า T จะสอดคล้องก็ตาม

struct Box<T> {
    var value: T
}
let bi = Box(value: 3)
let bs = Box(value: "hi")
// At this point Box has no Equatable/Hashable, regardless of T.

Equatable แบบมีเงื่อนไข

เพิ่ม Equatable เฉพาะเมื่อ T: Equatable โค้ดที่เปรียบเทียบกล่องของชนิดข้อมูลที่ไม่ใช่ Equatable จะไม่สามารถคอมไพล์ได้ ซึ่งช่วยเพิ่มความปลอดภัย

extension Box: Equatable where T: Equatable {
    static func == (lhs: Box<T>, rhs: Box<T>) -> Bool {
        lhs.value == rhs.value
    }
}
print(Box(value: 5) == Box(value: 5))   // true
// Works because Int is Equatable
// print(Box(value: someNonEquatable) == ...) // won't compile

Hashable แบบมีเงื่อนไข

เช่นเดียวกัน ให้ใช้ Hashable เฉพาะเมื่อสมาชิกเป็น Hashable จากนั้น Set/Dictionary จึงทำงานกับ Box<T> ได้

extension Box: Hashable where T: Hashable {
    func hash(into hasher: inout Hasher) {
        hasher.combine(value)
    }
}
let set: Set<Box<Int>> = [Box(value: 1), Box(value: 1)]
print(set.count)  // 1 because Hashable is available only when T: Hashable

ควบคุมคุณสมบัติด้วย where

ใช้ extension ... where เพื่อเปิดเผยเมธอดเฉพาะสำหรับความสามารถบางอย่าง (เช่น T: Numeric) ทำให้ส่วนเชื่อมต่อโปรแกรมพื้นฐานมีขนาดเล็ก

// Add extra APIs only when T supports them
extension Box where T: Numeric {
    func doubled() -> T { value + value }
}
print(Box(value: 7).doubled())     // 14 (Int is Numeric)
// Box(value: "hi").doubled()      // won't compile — String not Numeric

พบในไลบรารีมาตรฐาน

คุณใช้แนวทางนี้อยู่แล้วทุกวัน:

  • Array: Equatable เฉพาะเมื่อ Element: Equatable
  • การแฮชของ Dictionary/Set เฉพาะเมื่อคีย์หรือสมาชิกเป็น Hashable
  • การตรวจสอบความเท่ากันของ Optional เฉพาะเมื่อ Wrapped: Equatable

ประโยชน์: ส่วนเชื่อมต่อโปรแกรมแม่นยำและปลอดภัยตั้งแต่เวลาคอมไพล์

ตรวจสอบคำจำกัดความ

ตรวจสอบอย่างรวดเร็ว: การสอดคล้องแบบมีเงื่อนไขช่วยให้ทำสิ่งใดได้

สรุป

สรุป: ใช้ extension Type: Protocol where ... เพื่อเพิ่มการสอดคล้องตามโปรโตคอลและส่วนเชื่อมต่อโปรแกรมเฉพาะเมื่อข้อจำกัดเป็นจริง วิธีนี้ทำให้โค้ดแม่นยำ ปลอดภัย และทำความเข้าใจได้ง่าย

คำถามที่พบบ่อย

บทเรียน “การสอดคล้องแบบมีเงื่อนไข” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การสอดคล้องแบบมีเงื่อนไข” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 3 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การสอดคล้องแบบมีเงื่อนไข”

ทำให้ชนิดเจเนอริกสอดคล้องกับโปรโตคอล เฉพาะเมื่อ พารามิเตอร์ชนิดตรงตามข้อจำกัด (เช่น Box<T>: Equatable where T: Equatable ) คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน

บทเรียน “การสอดคล้องแบบมีเงื่อนไข” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม

ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. การสอดคล้องแบบมีเงื่อนไข
  2. ข้อจำกัดแบบเวียนเกิดและเจเนอริกระดับสูง
  3. ส่วนคำสั่ง where บนส่วนขยาย
← กลับไปที่ Swift Academy