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

ชนิดทึบแสงด้วยคีย์เวิร์ด some

คืนชนิดทึบแสงจากฟังก์ชันเพื่อรักษาเอกลักษณ์ของชนิดโดยไม่เปิดเผยรายละเอียด

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

ปัญหาที่ประเภททึบแสงช่วยแก้ไข

การส่งคืนประเภทโพรโทคอลด้วย any ทำให้ข้อมูลประเภทสูญหาย ส่วน some จะรักษาข้อมูลนั้นไว้พร้อมซ่อนรายละเอียดการนำไปใช้

protocol Shape { var area: Double { get } }
struct Circle: Shape { var area: Double { .pi * 4 } }

การส่งคืน some Protocol

some Shape ในฐานะประเภทค่าที่ส่งคืนจะบอกผู้เรียกว่าฉันส่งคืนประเภท Shape ที่เฉพาะเจาะจง โดยไม่เปิดเผยว่าเป็นประเภทใด

func makeShape() -> some Shape {
  return Circle()
}
let s = makeShape()
print(s.area)

เอกลักษณ์ของประเภทยังคงอยู่

เนื่องจากประเภท some มีประเภทพื้นฐานที่ตายตัว คอมไพเลอร์จึงอนุญาตให้ดำเนินการที่ต้องใช้ Self ได้

func makeEquatableShape() -> some Shape & Equatable {
  return Circle()
}
let a = makeEquatableShape()
let b = makeEquatableShape()
print(a == b) // works because types match

some เทียบกับ any

some เป็นประเภททึบแสง (ประเภทเดียวที่ตายตัว) ส่วน any เป็นประเภทอัตถิภาวะ (ประเภทใดก็ได้ที่สอดคล้องกันขณะทำงาน)

func withSome() -> some Shape { Circle() }  // opaque
func withAny() -> any Shape { Circle() }   // existential

some ใน Body ของ SwiftUI

SwiftUI ใช้ some View เพื่อให้ body ของแต่ละมุมมองส่งคืนประเภทเดียวที่สอดคล้องกัน โดยไม่เปิดเผยรายละเอียดภายในของการจัดวาง

struct ContentView: View {
  var body: some View {
    Text("Hello, World!")
  }
}

พารามิเตอร์ทึบแสงด้วย some

Swift 5.7 ขึ้นไปรองรับ some Protocol ในตำแหน่งพารามิเตอร์ โดยเป็นรูปแบบย่อทางไวยากรณ์ของข้อจำกัดแบบ generic

func printArea(_ shape: some Shape) {
  print(shape.area)
}
printArea(Circle())

Generic แบบย้อนกลับ

พารามิเตอร์ทึบแสง some P เทียบเท่ากับ (_ value: T) คอมไพเลอร์จะอนุมาน T ณ จุดที่เรียกใช้

func doubled(_ value: some Numeric) -> some Numeric {
  value * 2
}

ข้อจำกัดบน some

คุณสามารถรวมโพรโทคอลกับประเภททึบแสงได้เช่นเดียวกับ generic

func process(_ item: some Codable & Hashable) {
  let hash = item.hashValue
  print(hash)
}

การส่งคืนประเภทที่แตกต่างกัน

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

// This would NOT compile:
// func shape(_ big: Bool) -> some Shape {
//   big ? Circle() : Square()  // ERROR: different types
// }

ประเภททึบแสงในโพรโทคอล

โพรโทคอลที่มีประเภทที่เกี่ยวข้องจะนำมาใช้เป็นประเภทค่าที่ส่งคืนได้ง่ายขึ้นด้วย some

protocol Buildable { associatedtype Output; func build() -> Output }
func build(_ b: some Buildable) -> some Any {
  b.build()
}

ควรเลือกใช้ some เมื่อใด

เลือกใช้ some เมื่อคุณส่งคืนประเภทเดียวที่สอดคล้องกันและต้องการรักษาเอกลักษณ์ของประเภทไว้ ใช้ any เมื่อต้องการคอลเลกชันที่มีหลายประเภท

var shapes: [any Shape] = [Circle(), Circle()]
let single: some Shape = Circle()

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

คีย์เวิร์ด some รับรองอะไรเกี่ยวกับประเภทค่าที่ส่งคืน

สรุปบทเรียน

some สร้างประเภทค่าที่ส่งคืนแบบทึบแสง ซึ่งซ่อนประเภทที่เป็นรูปธรรมไว้พร้อมรักษาเอกลักษณ์ของประเภท ตัวอย่างมาตรฐานคือ some View ของ SwiftUI ใช้ some สำหรับการส่งคืนประเภทเดียว และใช้ any สำหรับคอลเลกชันที่มีหลายประเภท

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

บทเรียน “ชนิดทึบแสงด้วยคีย์เวิร์ด some” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ชนิดทึบแสงด้วยคีย์เวิร์ด some”

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

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

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

บทเรียน “ชนิดทึบแสงด้วยคีย์เวิร์ด some” ใช้เวลานานแค่ไหน

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

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

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

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

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