سوئیفت پشتیبانی داخلی برای پرتاب و گرفتن خطاهای قابل بازیابی در زمان اجرا فراهم می کند. به عنوان مثال، اگر یک عملیات در کد شما ناموفق باشد یا معتبر نباشد، 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 خارجی که فاقد اطلاعات کافی در مورد علت اصلی است، دریافت میشود، این خطا ممکن است برگردانده شود. |