توفّر Swift دعمًا مضمّنًا لرمي الأخطاء القابلة للاسترداد ورصدها أثناء
وقت التشغيل. على سبيل المثال، إذا تعذّر إتمام عملية في الرمز أو كانت غير صالحة، تُرسِل HomeError
API خطأ. ويؤدي ذلك إلى تبسيط وتحسين معالجة الأخطاء
من خلال السماح لك بالتركيز على الأخطاء القابلة للاسترداد فقط. يمكنك بعد ذلك تقديم
خيارات، مثل السماح للمستخدم بإعادة المحاولة أو عرض رسالة مثل
"لم يتم العثور على البنية". وبما أنّه ليس عليك معالجة كل
الاستثناءات المحتمَلة بشكل صريح، تكون رمزك البرمجية أقل تشويشًا، وبالتالي تبقى أكثر
تركيزًا على الغرض الأساسي منها.
مثال على كيفية معالجة خطأ قابل للاسترداد:
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:) على جهاز alimentador
للحيوانات الأليفة ولم يعد هناك طعام في الوحدة. |
unauthenticated |
لا يمكن تحديد هوية المتصل أو لا يتضمّن الطلب بيانات اعتماد مصادقة válida. |
unavailable |
الخدمة غير متاحة. من المرجّح أنّ هذا الموقف هو حالة عابر يمكن تصحيحها من خلال إعادة المحاولة مع فترة انتظار. يُرجى العِلم أنّه قد لا يكون من الآمن دائمًا إعادة محاولة العمليات غير الثابتة. |
unimplemented |
لم يتم تنفيذ العملية المطلوبة أو تفعيلها أو إتاحتها في هذه الخدمة. |
unknown |
حدث خطأ غير معروف. بشكل عام، يظهر الرمز unknown
عند حدوث خطأ لا يمكن تصنيفه باستخدام أي من
رموز الخطأ الأخرى. على سبيل المثال، قد يتم عرض هذا الخطأ عند تلقّي قيمة
حالة من واجهة برمجة تطبيقات خارجية لا تتضمّن معلومات
كافية عن السبب الأساسي. |