تخطَّ إلى المحتوى

as? / as! / is

فحص وتحويل الأنواع as? / as! / is

is تفحص نوع القيمة، as? تحوّل بأمان وترجع Optional، وas! تحوّل بإجبار وتتعطّل عند الفشل.

عند التعامل مع قيم من نوع عام (Any أو صنف أب)، تحتاج أحيانًا لمعرفة نوعها الحقيقي أو التعامل معها كنوع أكثر تحديدًا. is يرجع Bool فقط دون تحويل. as? يحاول التحويل ويرجع Optional (قيمة أو nil عند الفشل) — الخيار الآمن. as! يفترض نجاح التحويل ويتعطّل البرنامج فورًا إن فشل.

Any يمثّل قيمة من أي نوع على الإطلاق، وAnyObject يمثّل قيمة من أي صنف (class) فقط.

الصياغة

value is Type
value as? Type   // Optional
value as! Type   // إجباري، قد يتعطّل

📄 مثال

let items: [Any] = [1, "نص", true]

for item in items {
    if let number = item as? Int {
        print("رقم: \(number)")
    }
}

أهم النقاط

العنصرالوظيفة
isيرجع true/false فقط دون تحويل الكائن
as?تحويل آمن يرجع Optional من النوع المطلوب
as!تحويل إجباري — crash فوري إن فشل
Any / AnyObjectأي نوع على الإطلاق / أي صنف class فقط

💡 نصائح عملية

  • فضّل as? مع if let أو guard let دائمًا؛ استخدم as! فقط عند يقين تام من النوع
  • داخل switch يمكن كتابة case let x as SomeType: للمطابقة والتحويل معًا

⚠️ أخطاء شائعة

  • استخدام as! دون تأكّد، فيتعطّل البرنامج وقت التشغيل إن كان النوع مختلفًا
  • توقّع أن التحويل يغيّر الكائن الفعلي — التحويل يغيّر فقط الطريقة التي يُعامَل بها الكود

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار SWIFT الكامل بالعربي.