Swift:
การจัดการกับข้อผิดพลาด
วิธีการ:
Swift ใช้การจัดการข้อผิดพลาดด้วยบล็อก do
, try
, และ catch
มาดูกัน:
enum FileError: Error {
case fileDoesNotExist
case noPermission
}
func readFile(atPath path: String) throws -> String {
// ลองนึกว่าเรามีโลจิคที่นี่เพื่อตรวจสอบว่าไฟล์มีอยู่หรือไม่ และเรามีสิทธิ์ในการอ่านหรือไม่
let fileExists = false
let havePermission = true
if !fileExists {
throw FileError.fileDoesNotExist
}
if !havePermission {
throw FileError.noPermission
}
return "เนื้อหาไฟล์อยู่ที่นี่"
}
do {
let fileContent = try readFile(atPath: "/path/to/file")
print(fileContent)
} catch FileError.fileDoesNotExist {
print("อุ๊ปส์! ไม่พบไฟล์")
} catch FileError.noPermission {
print("อ๋อ! ไม่มีสิทธิ์ในการอ่านไฟล์")
} catch {
print("เกิดข้อผิดพลาดที่ไม่รู้จัก")
}
ตัวอย่างผลลัพธ์:
อุ๊ปส์! ไม่พบไฟล์
ศึกษาลึกลงไป
การจัดการข้อผิดพลาดไม่เคยเป็นเรื่องง่ายอย่างที่เป็นอยู่ในตอนนี้ เมื่อใช้ Objective-C, คุณจะต้องจัดการกับการชี้ไปยังวัตถุ NSError ซึ่งรู้สึกอึดอัด ตอนนี้เรามีระบบที่สง่างามกว่าด้วย Swift enums และโปรโตคอล Error
throw
ของ Swift ช่วยให้เราสามารถส่งสัญญาณว่ามีบางอย่างผิดปกติได้ บล็อก do
ทำหน้าที่เหมือนพื้นที่ที่ตระหนักถึงข้อผิดพลาด, เครื่องหมาย try
เรียกธุรกิจที่มีความเสี่ยง, และ catch
จัดการกับสิ่งต่างๆหากพวกเขาพาดพิง
Optional เป็นทางเลือกสำหรับสถานการณ์ที่ไม่ถึงกับเป็น “สถานะข้อผิดพลาด” แต่อาจยังไม่มี “ผลลัพธ์” ประการหนึ่ง เหมือนกับตัวแปรของชเรอดิงเกอร์—มีค่าหรือไม่มีค่าก็ได้
สำหรับการศึกษาลึกยิ่งขึ้น, ตรวจสอบประเภท Result
ซึ่งเป็นผสมผสานที่น่าสนใจระหว่างรูปแบบการคืนค่าปกติและรูปแบบข้อผิดพลาด
ดูเพิ่มเติม
- คู่มือการจัดการข้อผิดพลาดของ Swift อย่างเป็นทางการ: Apple Docs
- วิธีการที่ดีที่สุดในการจัดการข้อผิดพลาดของ Swift: RayWenderlich.com
- การจัดการข้อผิดพลาดขั้นสูงใน Swift: บทความ Medium