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