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

ส่วนคำสั่ง where บนส่วนขยาย

ใช้ where กับส่วนขยายของ ชนิด และ โปรโตคอล เพื่อเพิ่ม API เฉพาะเมื่อข้อจำกัดเป็นจริง (เช่น Array where Element: Equatable , Collection where Element == Int )

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

เหตุใดจึงต้องใช้ส่วนขยายแบบมีข้อจำกัด

เพิ่มส่วนเชื่อมต่อโปรแกรมเฉพาะเมื่อชนิดข้อมูลตรงตามข้อจำกัด โดยใช้ where กับส่วนขยาย:

  • ส่วนขยายของชนิดข้อมูล (เช่น Array)
  • ส่วนขยายของโปรโตคอล (เช่น Collection)
  • ข้อจำกัดที่ต้องตรงกันทุกประการ (เช่น Element == Int)

ส่วนขยายชนิดข้อมูลพร้อมข้อจำกัด

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

extension Array where Element: Equatable {
    func removing(_ value: Element) -> [Element] {
        filter { $0 != value }
    }
    func containsAll(_ others: [Element]) -> Bool {
        others.allSatisfy(self.contains)
    }
}
print([1,2,3].removing(2))        // [1,3]
print(["a","b"].containsAll(["b"])) // true

ส่วนขยายโปรโตคอลด้วย where

ส่วนขยายโปรโตคอลจะเพิ่มส่วนเชื่อมต่อโปรแกรมให้กับชนิดข้อมูลที่สอดคล้องกันทั้งหมดเมื่อข้อจำกัดเป็นจริง (ในที่นี้คือ Collection ใด ๆ ที่มีสมาชิกเป็น Comparable)

extension Collection where Element: Comparable {
    var isSorted: Bool {
        // Pair each element with the next; ensure non-decreasing order
        zip(self, dropFirst()).allSatisfy(<=)
    }
}
print([1,2,3].isSorted)     // true
print([3,1,2].isSorted)     // false

ข้อจำกัดที่ต้องตรงกันทุกประการ

ใช้ข้อจำกัดด้านความเท่ากันสำหรับส่วนเชื่อมต่อโปรแกรมที่เจาะจง เช่น เฉพาะเมื่อ Element == Int ส่วนเชื่อมต่อเหล่านี้จะไม่ปรากฏกับชนิดสมาชิกอื่น

extension Collection where Element == Int {
    var sum: Int { reduce(0, +) }
    func average() -> Double {
        isEmpty ? 0 : Double(sum) / Double(count)
    }
}
print([1,2,3].sum)          // 6
print([1,2,3].average())    // 2.0

ส่วนเชื่อมต่อโปรแกรมตามความสามารถ

กำหนดข้อจำกัดตามความสามารถ (โปรโตคอล เช่น Numeric, Hashable) เพื่อประกอบตัวช่วยที่ทรงพลังและนำกลับมาใช้ใหม่ได้

extension Collection where Element: Numeric {
    var total: Element { reduce(0, +) }
}
extension Sequence where Element: Hashable {
    var uniques: [Element] {
        var seen = Set<Element>()
        return filter { seen.insert($0).inserted }
    }
}
print([1,2,2,3].uniques)    // [1,2,3]
print([1,2,3].total)        // 6

บันทึกการออกแบบ

เคล็ดลับ:

  • กำหนดข้อจำกัดให้น้อยที่สุดเพื่อให้นำกลับมาใช้ซ้ำได้กว้างขึ้น
  • หลีกเลี่ยงส่วนขยายที่ซ้อนทับกันและกำหนดสมาชิก เดียวกัน เพราะอาจทำให้การเลือกโอเวอร์โหลดสับสนได้
  • บันทึกสมมติฐานต่าง ๆ (ลำดับ ความไม่ซ้ำกัน และขอบเขตของตัวเลข)

จุดประสงค์ของส่วนขยายแบบมีข้อจำกัด

ตรวจสอบสั้น ๆ: ส่วนขยายแบบมีข้อจำกัดช่วยให้คุณทำอะไรได้บ้าง

ทบทวน

ทบทวน: ใช้ where กับส่วนขยายของชนิดหรือโปรโตคอลเพื่อกำหนดเป้าหมายส่วนติดต่อได้อย่างแม่นยำ—ตามความสามารถ (: Comparable) หรือชนิดที่ตรงกันทุกประการ (== Int) ทำให้โค้ดปลอดภัยและค้นหาได้ง่าย

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

บทเรียน “ส่วนคำสั่ง where บนส่วนขยาย” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ส่วนคำสั่ง where บนส่วนขยาย”

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

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

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

บทเรียน “ส่วนคำสั่ง where บนส่วนขยาย” ใช้เวลานานแค่ไหน

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

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

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

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

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