رسیدگی به خطا در iOS

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

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