ב-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 חיצוני לא כולל מספיק מידע לגבי שורש הבעיה. |