Swift پشتیبانی داخلی برای پرتاب و گرفتن خطاهای قابلبازیابی در زمان اجرا ارائه میدهد. برای مثال، اگر عملیاتی در کد شما ناموفق باشد یا معتبر نباشد،
میانای برنامهسازی کاربردی خطای HomeError را نشان میدهد. این کار با امکان تمرکز فقط روی خطاهای قابلبازیابی،
رسیدگی به خطا را ساده و کارآمد میکند. سپس میتوانید گزینههایی ارائه دهید، مثلاً به کاربر اجازه دهید دوباره امتحان کند یا پیامی مثل «ساختار پیدا نشد» نمایش دهید. And because you don't have to explicitly handle every
possible exception, your code is less cluttered and consequently, remains more
focused on its primary purpose.
نمونهای از نحوه رسیدگی به خطای قابلبازیابی:
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 خارجی فاقد اطلاعات کافی
درباره علت ریشهای باشد. |