معالجة الأخطاء على أجهزة iOS

توفّر لغة Swift إمكانية مدمجة لإصدار الأخطاء القابلة للاسترداد ومعالجتها في وقت التشغيل. على سبيل المثال، إذا تعذّر تنفيذ عملية في الرمز أو كانت غير صالحة، ستعرض واجهة برمجة التطبيقات الخطأ 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 تجاوزت إحدى المَعلمات النطاق الصالح، استنادًا إلى حالة النظام الحالية. تظهر هذه الرسالة عندما تكون القيمة ضمن نطاق القيم التي يمكن أن يقبلها طلب البيانات من واجهة برمجة التطبيقات، ولكنّها غير منطقية في السياق الحالي.
permissionDenied ليس لديك الإذن لتنفيذ العملية المحدّدة. يجب عدم تفسير رمز الخطأ هذا على أنّه يعني أنّ الطلب صالح بأي شكل آخر.
resourceExhausted تم استنفاد بعض الموارد. على سبيل المثال، يمكن عرض هذا الخطأ عندما يتصل أحد المستخدمين dispense(item:amount:unit:presetName:) بجهاز تغذية الحيوانات الأليفة ولا يتوفّر المزيد من الطعام في الوحدة.
unauthenticated لا يمكن تحديد هوية المتصل أو لا يتضمّن الطلب بيانات اعتماد مصادقة صالحة.
unavailable الخدمة غير متاحة. من المرجّح أنّ هذه الحالة عابرة ويمكن تصحيحها من خلال إعادة المحاولة مع التراجع. يُرجى العِلم أنّه ليس من الآمن دائمًا إعادة محاولة تنفيذ العمليات غير المتكرّرة.
unimplemented لم يتم تنفيذ العملية المطلوبة أو إتاحتها أو تفعيلها في هذه الخدمة.
unknown حدث خطأ غير معروف. بشكل عام، يظهر الرمز unknown عند حدوث خطأ لا يمكن تصنيفه باستخدام أي من رموز الخطأ الأخرى. على سبيل المثال، قد يتم عرض هذا الخطأ عند تلقّي قيمة حالة من واجهة برمجة تطبيقات خارجية لا تتضمّن معلومات كافية حول السبب الأساسي.