معالجة الأخطاء على أجهزة 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:) على جهاز تغذية الحيوانات الأليفة ولم يتبقّ أي طعام في الوحدة.

قد يرجع ذلك أيضًا إلى تجاوز حصة مشروع Home APIs. لمزيد من المعلومات، يُرجى الاطّلاع على إدارة الحصص.
unauthenticated لا يمكن تحديد هوية المتصل أو لا يتضمن الطلب بيانات اعتماد صالحة للمصادقة.
unavailable الخدمة غير متوفّرة. على الأرجح أنّ هذه الحالة مؤقتة، ويمكن تصحيحها من خلال إعادة المحاولة مع استخدام فترة انتظار. يُرجى العِلم أنّه ليس من الآمن دائمًا إعادة محاولة تنفيذ العمليات غير المتكررة.
unimplemented لم يتم تنفيذ العملية المطلوبة أو إتاحتها أو تفعيلها في هذه الخدمة.
unknown حدث خطأ غير معروف. بشكل عام، يظهر الرمز unknown عند حدوث خطأ لا يمكن تصنيفه باستخدام أي من رموز الأخطاء الأخرى. على سبيل المثال، قد يظهر هذا الخطأ عندما تكون قيمة الحالة التي تم تلقّيها من واجهة برمجة تطبيقات خارجية لا تتضمّن معلومات كافية عن السبب الأساسي.