توفّر لغة 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 التي قد تظهر لك:
| الرمز | المعنى |
|---|---|
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 عند حدوث حالة خطأ لا يمكن تصنيفها باستخدام أي من رموز الأخطاء الأخرى. على سبيل المثال، قد يتم عرض هذا الخطأ عند تلقّي قيمة حالة من واجهة برمجة تطبيقات خارجية لا تتضمّن معلومات كافية عن السبب الجذري. |