Swift มีการรองรับในตัวสำหรับการส่งและรับข้อผิดพลาดที่กู้คืนได้ใน
รันไทม์ เช่น หากการดำเนินการในโค้ดล้มเหลวหรือไม่ถูกต้อง API จะแสดงข้อผิดพลาด HomeError
ซึ่งจะช่วยลดความซับซ้อนและเพิ่มประสิทธิภาพการจัดการข้อผิดพลาด
โดยให้คุณมุ่งเน้นเฉพาะข้อผิดพลาดที่กู้คืนได้ จากนั้นคุณสามารถระบุ
ตัวเลือกต่างๆ เช่น อนุญาตให้ผู้ใช้ลองอีกครั้งหรือแสดงข้อความ เช่น
"ไม่พบโครงสร้าง" และเนื่องจากคุณไม่จำเป็นต้องจัดการข้อยกเว้นที่เป็นไปได้ทุกอย่างอย่างชัดเจน โค้ดจึงไม่รกและยังคงมุ่งเน้นไปที่วัตถุประสงค์หลักได้มากขึ้น
ตัวอย่างวิธีจัดการข้อผิดพลาดที่กู้คืนได้
let light1 = lightDevices.first
if let light = light1 {
do {
try await structure.move(device: light, to: room)
} catch let error as HomeError {
// Code for handling the exception
}
ตารางต่อไปนี้แสดงความหมายของรหัส HomeError
ที่คุณอาจพบ
รหัส | ความหมาย |
---|---|
aborted |
ยกเลิกการดำเนินการแล้ว โดยปกติข้อความนี้จะปรากฏขึ้นเมื่อมี ปัญหาเกี่ยวกับความพร้อมกัน เช่น การตรวจสอบลำดับล้มเหลวหรือการทำธุรกรรม ถูกยกเลิก |
alreadyExists |
มีทรัพยากรหรือเอนทิตีที่คุณพยายามสร้างอยู่แล้ว เช่น กำหนดเวลาที่มีชื่อสำหรับตัวควบคุมอุณหภูมิ |
cancelled |
การดำเนินการถูกยกเลิก โดยปกติแล้วผู้โทรจะเป็นผู้ยกเลิก |
dataLoss |
ข้อมูลสูญหายโดยกู้คืนไม่ได้หรือข้อมูลเสียหาย |
deadlineExceeded |
กำหนดเวลาหมดอายุก่อนที่การดำเนินการจะเสร็จสมบูรณ์ สำหรับการดำเนินการ ที่เปลี่ยนสถานะของระบบ ข้อผิดพลาดนี้อาจแสดงขึ้น แม้ว่าการดำเนินการจะเสร็จสมบูรณ์แล้วก็ตาม เช่น การตอบกลับที่สำเร็จจากเซิร์ฟเวอร์อาจล่าช้า นานพอที่กำหนดเวลาจะหมดอายุ |
failedPrecondition |
ระบบปฏิเสธการดำเนินการเนื่องจากระบบไม่ได้อยู่ในสถานะ
ที่จำเป็นสำหรับการดำเนินการ เช่น คุณอาจได้รับข้อความนี้หากเรียกใช้
stop
ในเตาอบที่หยุดทำงานแล้ว |
internal |
ข้อผิดพลาดภายใน ซึ่งหมายความว่าระบบพื้นฐานได้ละเมิดข้อกำหนดบางอย่างที่คาดไว้ รหัสข้อผิดพลาดนี้สงวนไว้สำหรับ ข้อผิดพลาดร้ายแรง |
invalidArgument |
ไคลเอ็นต์ระบุอาร์กิวเมนต์ไม่ถูกต้อง โปรดทราบว่าข้อผิดพลาดนี้แตกต่าง จาก `failedPrecondition` `invalidArgument` ระบุอาร์กิวเมนต์ ที่มีปัญหาโดยไม่คำนึงถึงสถานะของระบบ (เช่น ชื่อไฟล์ที่จัดรูปแบบไม่ถูกต้อง) |
notFound |
คุณระบุเอนทิตีหรือทรัพยากรที่ไม่พบ For
example, specifying a nonexistent track id when calling
play on a media player device. |
outOfRange |
พารามิเตอร์เกินช่วงที่ถูกต้องตามสถานะระบบปัจจุบัน ข้อความนี้จะปรากฏขึ้นเมื่อค่าอยู่ในช่วงของค่า ที่การเรียก API อาจยอมรับได้ แต่ไม่สมเหตุสมผลใน บริบทปัจจุบัน |
permissionDenied |
คุณไม่มีสิทธิ์ดำเนินการที่ระบุ รหัสข้อผิดพลาดนี้ ไม่ควรตีความว่าคำขอถูกต้อง ในกรณีอื่นๆ |
resourceExhausted |
ทรัพยากรบางส่วนหมดแล้ว เช่น อาจเกิดข้อผิดพลาดนี้
เมื่อมีการเรียกใช้
dispense(item:amount:unit:presetName:) ในอุปกรณ์ให้อาหารสัตว์เลี้ยง
และไม่มีอาหารเหลืออยู่ในเครื่องแล้ว |
unauthenticated |
ระบุผู้โทรไม่ได้หรือคำขอไม่มีข้อมูลเข้าสู่ระบบการตรวจสอบสิทธิ์ที่ถูกต้อง |
unavailable |
บริการไม่พร้อมใช้งาน ซึ่งมักเป็นเงื่อนไขชั่วคราว ที่แก้ไขได้โดยการลองอีกครั้งด้วยการหยุดชั่วคราว โปรดทราบว่า การลองดำเนินการที่ไม่ใช่แบบ Idempotent อีกครั้งอาจไม่ปลอดภัยเสมอไป |
unimplemented |
การดำเนินการที่ขอไม่ได้ใช้งาน ไม่รองรับ หรือไม่ได้เปิดใช้ใน บริการนี้ |
unknown |
ข้อผิดพลาดที่ไม่รู้จัก โดยทั่วไป unknown จะปรากฏ
เมื่อเกิดข้อผิดพลาดที่ไม่สามารถจัดประเภทโดยใช้รหัสข้อผิดพลาดอื่นๆ
ได้ เช่น ข้อผิดพลาดนี้อาจแสดงเมื่อได้รับค่าสถานะจาก API ภายนอกซึ่งไม่มีข้อมูลเพียงพอเกี่ยวกับสาเหตุหลัก |