Swift Academy · บทเรียน

ข้อจำกัดของชนิดทั่วไปและส่วนคำสั่ง where

ใช้ข้อจำกัดหลายรายการ ข้อกำหนดชนิดเดียวกัน และส่วนขยายตามเงื่อนไข

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

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

ทบทวนพื้นฐาน Generic

Generics ช่วยให้คุณเขียนโค้ดที่ยืดหยุ่นและนำกลับมาใช้ใหม่ได้ โดยทำงานกับประเภทใดก็ได้

func identity<T>(_ value: T) -> T { return value }
print(identity(42))
print(identity("hello"))

ข้อจำกัดประเภทเดียว

กำหนดให้พารามิเตอร์ generic สอดคล้องกับโพรโทคอลโดยใช้ T: Protocol

func largest<T: Comparable>(_ a: T, _ b: T) -> T {
  return a > b ? a : b
}
print(largest(3, 7))

ข้อจำกัดหลายรายการด้วย &

กำหนดให้ประเภทหนึ่งสอดคล้องกับหลายโพรโทคอลได้ โดยนำโพรโทคอลเหล่านั้นมารวมกันด้วย &

func process<T: Equatable & Hashable>(_ items: [T]) -> Set<T> {
  return Set(items)
}
print(process([1,2,2,3]))

อนุประโยค where ในฟังก์ชัน

อนุประโยค where หลังรายการพารามิเตอร์ช่วยให้คุณเพิ่มข้อจำกัดที่แม่นยำยิ่งขึ้น

func allEqual<T: Equatable>(_ array: [T]) -> Bool where T: CustomStringConvertible {
  guard let first = array.first else { return true }
  return array.allSatisfy { $0 == first }
}

where ในส่วนขยาย

ขยายประเภทเฉพาะเมื่อพารามิเตอร์ generic ของประเภทนั้นตรงตามข้อกำหนด

extension Array where Element: Numeric {
  var sum: Element { reduce(0, +) }
}
print([1,2,3].sum)

ข้อกำหนดประเภทเดียวกัน

กำหนดให้ประเภทที่เกี่ยวข้องสองประเภทเป็นประเภทเดียวกันด้วย T == U

func zip2<A: Sequence, B: Sequence>(_ a: A, _ b: B) -> [(A.Element, B.Element)]
  where A.Element == B.Element {
  return Swift.zip(a, b).map { ($0.0, $0.1) }
}

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

ทำให้ประเภท generic สอดคล้องกับโพรโทคอลแบบมีเงื่อนไข เมื่อพารามิเตอร์ของประเภทนั้นตรงตามข้อจำกัด

extension Array: Equatable where Element: Equatable {
  // stdlib already does this, shown for illustration
}
print([1,2] == [1,2])

คลาส Generic ที่มีข้อจำกัด

Generic ของคลาสสามารถมีข้อจำกัดได้เช่นกัน เพื่อรับรองความปลอดภัยของประเภทขณะสร้างอินสแตนซ์

class Box<T: Codable> {
  var value: T
  init(_ v: T) { self.value = v }
}
let box = Box(42)

โพรโทคอลที่มีข้อจำกัดของประเภทที่เกี่ยวข้อง

ใช้ where ในคำจำกัดความของโพรโทคอลเพื่อกำหนดข้อจำกัดให้กับประเภทที่เกี่ยวข้อง

protocol Container {
  associatedtype Item: Equatable
  var items: [Item] { get }
  func contains(_ item: Item) -> Bool
}

อนุประโยค where หลายรายการ

เรียงซ้อนเงื่อนไข where หลายรายการโดยคั่นด้วยจุลภาคสำหรับข้อกำหนดที่ซับซ้อน

func merge<C: Collection>(_ a: C, _ b: C) -> [C.Element]
  where C.Element: Comparable, C.Element: Hashable {
  return Array(Set(a + b)).sorted()
}

การปรับแต่งประเภท Generic

Swift ปรับแต่งฟังก์ชัน generic ขณะคอมไพล์สำหรับประเภทที่เป็นรูปธรรม เพื่อให้สามารถเพิ่มประสิทธิภาพได้

// @_specialize instructs the compiler to emit a specialized version
@_specialize(where T == Int)
func add<T: Numeric>(_ a: T, _ b: T) -> T { a + b }

ตรวจสอบความเข้าใจ

คุณจะกำหนดให้ประเภท generic สอดคล้องกับทั้ง Comparable และ Hashable ได้อย่างไร

สรุปบทเรียน

ข้อจำกัดของ generic ด้วย T: Protocol ข้อจำกัดหลายรายการผ่าน & อนุประโยค where สำหรับข้อกำหนดที่แม่นยำ ข้อกำหนดประเภทเดียวกัน และการสอดคล้องแบบมีเงื่อนไข ช่วยให้คุณควบคุมโค้ด generic ได้อย่างแม่นยำ

เริ่มต้นได้ฟรี

เรียนรู้ Swift ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
122
บทเรียน
409

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

บทเรียน “ข้อจำกัดของชนิดทั่วไปและส่วนคำสั่ง where” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ข้อจำกัดของชนิดทั่วไปและส่วนคำสั่ง where”

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

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

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

บทเรียน “ข้อจำกัดของชนิดทั่วไปและส่วนคำสั่ง where” ใช้เวลานานแค่ไหน

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

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

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

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

  1. ข้อจำกัดของชนิดทั่วไปและส่วนคำสั่ง where
  2. ชนิดทึบแสงด้วยคีย์เวิร์ด some
  3. ชนิดดำรงอยู่ด้วย any และการลบชนิด
  4. ชนิดที่เชื่อมโยงหลักและการโยนข้อผิดพลาดที่มีชนิด
← กลับไปที่ Swift Academy