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