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 |
คุณระบุเอนทิตีหรือทรัพยากรที่ไม่พบ เช่น การระบุรหัสแทร็กที่ไม่มีอยู่เมื่อเรียก
play ในอุปกรณ์เครื่องเล่นสื่อ |
outOfRange |
พารามิเตอร์เกินช่วงที่ถูกต้องตามสถานะระบบปัจจุบัน ข้อความนี้จะปรากฏขึ้นเมื่อค่าอยู่ในช่วงค่าที่การเรียก API อาจยอมรับได้ แต่ไม่สมเหตุสมผลในบริบทปัจจุบัน |
permissionDenied |
คุณไม่มีสิทธิ์ดำเนินการที่ระบุ ไม่ควรตีความรหัสข้อผิดพลาดนี้ ว่าคำขอถูกต้องในกรณีอื่นๆ |
resourceExhausted |
ทรัพยากรบางอย่างหมดลง เช่น ระบบอาจแสดงข้อผิดพลาดนี้เมื่อมีการเรียก
dispense(item:amount:unit:presetName:) ในอุปกรณ์
เครื่องให้อาหารสัตว์เลี้ยงและไม่มีอาหารเหลืออยู่ในเครื่องนอกจากนี้ ข้อผิดพลาดนี้อาจเกิดจากการเกินโควต้าโปรเจ็กต์ของ Home APIs ดูข้อมูลเพิ่มเติมได้ที่ การจัดการโควต้า |
unauthenticated |
ระบบระบุผู้เรียกไม่ได้หรือคำขอไม่มีข้อมูลเข้าสู่ระบบการตรวจสอบสิทธิ์ที่ถูกต้อง |
unavailable |
บริการไม่พร้อมใช้งาน ซึ่งมักเป็นเงื่อนไขชั่วคราว ที่แก้ไขได้โดยการลองอีกครั้งด้วยการหน่วงเวลา โปรดทราบว่า การลองการดำเนินการที่ไม่ใช่ Idempotent อีกครั้งอาจไม่ปลอดภัยเสมอไป |
unimplemented |
การดำเนินการที่ขอไม่มีการใช้งาน ไม่รองรับ หรือไม่ได้เปิดใช้ใน บริการนี้ |
unknown |
ข้อผิดพลาดที่ไม่รู้จัก โดยทั่วไป unknown จะปรากฏขึ้น
เมื่อเกิดเงื่อนไขข้อผิดพลาดที่ไม่สามารถจัดประเภทโดยใช้รหัสข้อผิดพลาดอื่นๆ
เช่น ระบบอาจแสดงข้อผิดพลาดนี้เมื่อได้รับค่าสถานะจาก API ภายนอกที่ไม่มีข้อมูลเพียงพอเกี่ยวกับสาเหตุหลัก |