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 |
השירות לא זמין. הסיבה היא כנראה מצב זמני שאפשר לתקן אותו באמצעות ניסיון חוזר עם השהיה. שימו לב: לא תמיד בטוח לנסות שוב פעולות שהן לא אידמפוטנטיות. |
unimplemented |
הפעולה המבוקשת לא יושמה, לא נתמכת או לא מופעלת בשירות הזה. |
unknown |
שגיאה לא ידועה. באופן כללי, unknown מופיע כשמתרחש תנאי שגיאה שלא ניתן לסווג באמצעות אף אחד מקודי השגיאה האחרים. לדוגמה, השגיאה הזו יכולה להיות מוחזרת כשערך סטטוס מתקבל מ-API חיצוני שאין בו מספיק מידע לגבי שורש הבעיה. |