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 ภายนอกซึ่งมีข้อมูลไม่เพียงพอเกี่ยวกับสาเหตุหลัก |