การจัดการข้อผิดพลาดใน iOS

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 ที่คุณอาจพบ

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