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