การสอดคล้องแบบมีเงื่อนไข
ทำให้ชนิดเจเนอริกสอดคล้องกับโปรโตคอล เฉพาะเมื่อ พารามิเตอร์ชนิดตรงตามข้อจำกัด (เช่น 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 compileHashable แบบมีเงื่อนไข
เช่นเดียวกัน ให้ใช้ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การสอดคล้องแบบมีเงื่อนไข
- ข้อจำกัดแบบเวียนเกิดและเจเนอริกระดับสูง
- ส่วนคำสั่ง where บนส่วนขยาย