ชนิดที่เชื่อมโยงหลักและการโยนข้อผิดพลาดที่มีชนิด
จำกัดชนิดดำรงอยู่ของโพรโทคอล และส่งต่อข้อผิดพลาดที่มีชนิดใน Swift 6
ชนิดที่เชื่อมโยงหลักและการโยนข้อผิดพลาดที่มีชนิด เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
ชนิดที่เกี่ยวข้องหลัก
Swift 5.7 ให้คุณระบุชนิดที่เกี่ยวข้องหลักในโพรโทคอลได้ ทำให้สามารถใช้ชนิดอัตถิภาวะที่มีข้อจำกัดได้
protocol Container<Element> {
associatedtype Element
var items: [Element] { get }
}
struct Bag<T>: Container { var items: [T] = [] }ชนิดอัตถิภาวะที่มีข้อจำกัด
เมื่อมีชนิดที่เกี่ยวข้องหลัก คุณสามารถเขียน any Container เพื่อจำกัดชนิดอัตถิภาวะให้แคบลงได้
func printItems(_ c: any Container<Int>) {
c.items.forEach { print($0) }
}
printItems(Bag(items: [1,2,3]))ชนิดอัตถิภาวะของคอลเลกชันที่มีข้อจำกัด
โพรโทคอลในไลบรารีมาตรฐาน เช่น Collection รองรับชนิดที่เกี่ยวข้องหลักแล้ว
func first(_ c: any Collection<String>) -> String? {
c.first
}
print(first(["a","b","c"]) ?? "none")บทนำสู่การโยนข้อผิดพลาดแบบระบุชนิด
Swift 6 นำเสนอการโยนข้อผิดพลาดแบบระบุชนิด ทำให้คุณประกาศชนิดข้อผิดพลาดที่แน่นอนซึ่งฟังก์ชันอาจโยนได้
enum NetworkError: Error { case timeout, notFound }
func fetch() throws(NetworkError) -> Data {
throw NetworkError.timeout
}การดักจับข้อผิดพลาดแบบครอบคลุมด้วยการโยนข้อผิดพลาดแบบระบุชนิด
เนื่องจากทราบชนิดข้อผิดพลาดแล้ว คอมไพเลอร์จึงตรวจสอบได้ว่ามีการจัดการทุกกรณีอย่างครบถ้วน
do {
let _ = try fetch()
} catch .timeout {
print("Timed out")
} catch .notFound {
print("Not found")
}การโยนข้อผิดพลาดแบบระบุชนิดในโพรโทคอล
ข้อกำหนดของโพรโทคอลสามารถระบุการโยนข้อผิดพลาดแบบมีชนิดได้ ทำให้ชนิดที่สอดคล้องกันสามารถระบุชนิดข้อผิดพลาดได้อย่างแม่นยำ
protocol Fetchable {
associatedtype Failure: Error
func fetch() throws(Failure) -> Data
}การโยนข้อผิดพลาดต่อด้วยการโยนข้อผิดพลาดแบบระบุชนิด
rethrows ทำงานร่วมกับการโยนข้อผิดพลาดแบบระบุชนิดได้ โดยฟังก์ชันภายนอกจะส่งต่อชนิดข้อผิดพลาดจากฟังก์ชันภายใน
func map<T, E: Error>(_ array: [T], transform: (T) throws(E) -> T) throws(E) -> [T] {
try array.map { try transform($0) }
}การใช้ชนิดที่เกี่ยวข้องหลักร่วมกับการโยนข้อผิดพลาดแบบระบุชนิด
คุณสามารถใช้ความสามารถทั้งสองอย่างร่วมกันเพื่อสร้างเอพีไอที่ระบุชนิดได้อย่างแม่นยำและปลอดภัยต่อชนิดข้อมูล
protocol Repository<Model> {
associatedtype Model
associatedtype Failure: Error
func fetchAll() throws(Failure) -> [Model]
}การโยนข้อผิดพลาดแบบระบุชนิดที่ไม่เปิดเผย
throws(any Error) เทียบเท่ากับการโยนข้อผิดพลาดที่ไม่ระบุชนิด และเปิดทางเลือกสำหรับกรณีที่ต้องการความยืดหยุ่น
func riskyOp() throws(any Error) {
// can throw any error
}การย้ายจากการโยนข้อผิดพลาดที่ไม่ระบุชนิดเป็นแบบระบุชนิด
แนวทางการย้ายคือ ค่อย ๆ ใส่ชนิดข้อผิดพลาดรูปธรรมให้กับฟังก์ชันที่สามารถโยนข้อผิดพลาดได้ทีละขั้นตอน
// Before:
func load() throws -> Data { ... }
// After:
func load() throws(NetworkError) -> Data { ... }การโยนข้อผิดพลาดแบบระบุชนิดและการทำงานแบบอะซิงก์
การโยนข้อผิดพลาดแบบระบุชนิดทำงานร่วมกับการทำงานแบบอะซิงก์ได้อย่างเป็นธรรมชาติ โดย async throws(E) เป็นไวยากรณ์ที่ถูกต้อง
func fetchAsync() async throws(NetworkError) -> Data {
throw NetworkError.notFound
}ตรวจสอบความเข้าใจ
การมีชนิดที่เกี่ยวข้องหลักในโพรโทคอลทำให้เกิดความสามารถใด
ทบทวนบทเรียน
ชนิดที่เกี่ยวข้องหลัก (Swift 5.7) ทำให้ใช้ชนิดอัตถิภาวะที่มีข้อจำกัด เช่น any Collection ได้ การโยนข้อผิดพลาดแบบระบุชนิด (Swift 6) ช่วยให้ประกาศชนิดข้อผิดพลาดที่แน่นอนสำหรับบล็อกการดักจับข้อผิดพลาดแบบครอบคลุมได้ ความสามารถทั้งสองอย่างช่วยเพิ่มความปลอดภัยของชนิดข้อมูลและความสื่อความหมายของเอพีไอ
เรียนรู้ Swift ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 122
- บทเรียน
- 409
คำถามที่พบบ่อย
บทเรียน “ชนิดที่เชื่อมโยงหลักและการโยนข้อผิดพลาดที่มีชนิด” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ชนิดที่เชื่อมโยงหลักและการโยนข้อผิดพลาดที่มีชนิด” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ชนิดที่เชื่อมโยงหลักและการโยนข้อผิดพลาดที่มีชนิด”
จำกัดชนิดดำรงอยู่ของโพรโทคอล และส่งต่อข้อผิดพลาดที่มีชนิดใน Swift 6 คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “ชนิดที่เชื่อมโยงหลักและการโยนข้อผิดพลาดที่มีชนิด” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ข้อจำกัดของชนิดทั่วไปและส่วนคำสั่ง where
- ชนิดทึบแสงด้วยคีย์เวิร์ด some
- ชนิดดำรงอยู่ด้วย any และการลบชนิด
- ชนิดที่เชื่อมโยงหลักและการโยนข้อผิดพลาดที่มีชนิด