0Pricing
Swift Academy · درس

تحويل الأنواع: ‏is وas? وas! وas

تحقّقوا من الأنواع وحوّلوها بأمان باستخدام معاملات تحويل الأنواع في Swift.

تحويل الأنواع: ‏is وas? وas! وas درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 4 دروس في المجموع.

ما تحويل الأنواع؟

يتيح لك تحويل الأنواع التحقق من مثيل أو تحويله إلى فئة مختلفة ضمن هرمية الفئات نفسها.

class Animal { var name: String = "Animal" }
class Dog: Animal { func bark() { print("Woof") } }
let a: Animal = Dog()
print(a.name)

المعامل is

استخدم is للتحقق مما إذا كان المثيل ينتمي إلى فئة فرعية معينة.

let a: Animal = Dog()
if a is Dog {
  print("It's a dog")
}

التحويل إلى نوع فرعي باستخدام as?

يحاول as? التحويل إلى نوع فرعي ويعيد Optional. وإذا فشل التحويل، تكون النتيجة nil.

let a: Animal = Dog()
if let dog = a as? Dog {
  dog.bark()
} else {
  print("Not a dog")
}

التحويل القسري إلى نوع فرعي باستخدام as!

يُجري as! تحويلًا قسريًا إلى نوع فرعي. استخدمه فقط عندما تكون متأكدًا من النوع؛ إذ يتسبب في انهيار التطبيق إذا كان النوع غير صحيح.

let a: Animal = Dog()
let dog = a as! Dog
dog.bark()

التحويل إلى نوع أساسي باستخدام as

ينجح التحويل من فئة فرعية إلى فئة أساسية دائمًا، ويستخدم as.

let dog = Dog()
let animal = dog as Animal
print(animal.name)

تحويل الأنواع في المجموعات

تتطلب المصفوفات ذات الأنواع المختلطة والمُعرَّفة على أنها [Any] تحويلًا لاستخدام سلوك محدد.

let items: [Any] = [1, "hello", Dog()]
for item in items {
  if let d = item as? Dog { d.bark() }
  if let s = item as? String { print(s) }
}

تحويل الأنواع باستخدام AnyObject

يمثل AnyObject أي مثيل لفئة. استخدم as? لاستخراج النوع الفعلي.

let objs: [AnyObject] = [Dog(), Dog()]
for obj in objs {
  if let d = obj as? Dog { d.bark() }
}

تحويل أنواع البروتوكولات

يمكنك التحويل بين أنواع البروتوكولات والأنواع الفعلية باستخدام المعاملات نفسها.

protocol Runnable { func run() }
class Cat: Animal, Runnable { func run() { print("Cat runs") } }
let r: Runnable = Cat()
if let cat = r as? Cat { print(cat.name) }

مطابقة الأنماط باستخدام is في switch

يمكن لعبارة switch في Swift مطابقة النوع باستخدام نمط is.

let value: Any = 42
switch value {
case is Int: print("Integer")
case is String: print("String")
default: print("Other")
}

أنماط as? في switch

اجمع بين switch وlet x as Type للتحقق وربط القيمة في خطوة واحدة.

let value: Any = "Swift"
switch value {
case let s as String: print("String: \(s)")
case let i as Int: print("Int: \(i)")
default: break
}

أفضل ممارسات التحويل الآمن

فضّل دائمًا as? على as! لتجنب انهيارات وقت التشغيل في كود الإنتاج.

func describe(_ obj: AnyObject) {
  if let dog = obj as? Dog { dog.bark(); return }
  print("Unknown type")
}

تحقق سريع

أي معامل يعيد Optional عند التحويل إلى نوع فرعي؟

مراجعة الدرس

تحويل الأنواع في Swift: يتحقق is من النوع، ويحوّل as? بأمان إلى نوع فرعي مع إرجاع Optional، ويُجري as! تحويلًا قسريًا إلى نوع فرعي، بينما يحوّل as إلى نوع أساسي. فضّل as? في كود الإنتاج.

الأسئلة الشائعة

هل درس «تحويل الأنواع: ‏is وas? وas! وas» مجاني؟

نعم — نص درس «تحويل الأنواع: ‏is وas? وas! وas» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 4 دروس في المجموع.

ماذا ستتعلم في «تحويل الأنواع: ‏is وas? وas! وas»؟

تحقّقوا من الأنواع وحوّلوها بأمان باستخدام معاملات تحويل الأنواع في Swift. تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟

لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «تحويل الأنواع: ‏is وas? وas! وas»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟

نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. وراثة الأصناف والكلمة المفتاحية super
  2. ‏override وfinal ومنع إنشاء الأصناف الفرعية
  3. تحويل الأنواع: ‏is وas? وas! وas
  4. المُنهِيات ودورة حياة الذاكرة
← العودة إلى Swift Academy