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