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