0Pricing
Swift Academy · درس

العامل Optional Chaining ?.

استدعِ الدوال وادخل إلى الخصائص في القيم الاختيارية دون التسبب في انهيار التطبيق

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

مرحبًا

يتيح لك التسلسل الاختياري استدعاء الدوال والوصول إلى الخصائص واستخدام الفهارس الفرعية عبر سلسلة من القيم الاختيارية بأمان. إذا كانت أي حلقة في السلسلة nil، يُعيد التعبير بأكمله nil دون التسبب في عطل.

العامل ?.

```swift struct Address { var city: String } struct Person { var address: Address? } let alice = Person(address: Address(city: "Istanbul")) let bob = Person(address: nil) print(alice.address?.city) // Optional("Istanbul") print(bob.address?.city) // nil ```

تسلسل مستويات متعددة

يمكن أن تكون السلاسل عميقة بأي عدد من المستويات: ```swift struct Company { var ceo: Person? } let company = Company(ceo: alice) let city = company.ceo?.address?.city print(city ?? "Unknown") // "Istanbul" ``` إذا كانت `ceo` أو `address` تساوي nil، تصبح `city` مساوية لـ nil.

استدعاء الدوال عبر التسلسل

يمكن أيضًا استدعاء الدوال عبر التسلسل الاختياري: ```swift var name: String? = "alice" let upper = name?.uppercased() // Optional("ALICE") name = nil let upper2 = name?.uppercased() // nil ``` يصبح نوع القيمة المُعادة اختياريًا: يتحول `String` إلى `String?`.

الفهارس الفرعية عبر التسلسل

```swift var dict: [String: [Int]]? = ["scores": [10, 20, 30]] let first = dict?["scores"]?[0] // Optional(10) dict = nil let none = dict?["scores"]?[0] // nil ``` تعمل الفهارس الفرعية بالطريقة نفسها التي تعمل بها الخصائص والدوال ضمن السلسلة.

ينتج التسلسل قيمة Optional

حتى إذا كانت النتيجة النهائية غير اختيارية، فإن التسلسل يغلّفها في Optional: ```swift struct Cat { var lives: Int = 9 } var cat: Cat? = Cat() let lives = cat?.lives // Int? not Int ``` ألغِ تغليفها باستخدام `??` أو `if let` أو `guard let` حسب الحاجة.

تعيين القيم من خلال التسلسل

يمكنكم تعيين الخصائص من خلال السلاسل الاختيارية: ```swift var profile: UserProfile? = UserProfile() profile?.name = "Alice" ``` إذا كانت `profile` تساوي nil، فسيتم تجاهل عملية التعيين بصمت، من دون حدوث انهيار.

استدعاء أساليب Void من خلال التسلسل

```swift var manager: SoundManager? manager?.play() // silently ignored if nil ``` يعيد الاستدعاء القيمة `Void?` — أي `()` إذا لم تكن القيمة nil، و`nil` إذا كانت القيمة الاختيارية تساوي nil. يمكنكم التحقق من النتيجة لمعرفة ما إذا كان الاستدعاء قد حدث.

التسلسل الاختياري مقابل فك التغليف الإجباري

```swift // Forced unwrap — crashes if nil: let city = alice.address!.city // Optional chaining — safe: let city = alice.address?.city ``` احرصوا دائمًا على تفضيل التسلسل الاختياري. استخدموا `!` فقط عندما تكونون متأكدين من استحالة حدوث nil.

الدمج مع ?? لتوفير القيم الافتراضية

يمكنكم وضع `??` بعد التسلسل الاختياري للحصول على قيم افتراضية بطريقة واضحة: ```swift let displayCity = user.profile?.address?.city ?? "Unknown City" let count = database?.records?.count ?? 0 ``` إما أن تُرجع السلسلة بأكملها قيمة، أو تنتقل إلى القيمة الافتراضية.

تحقق سريع

إذا كانت أي وصلة في سلسلة اختيارية تساوي `nil`، فما القيمة التي يُرجعها التعبير بأكمله؟

مراجعة

أهم النقاط: • يتيح `?.` الوصول بأمان إلى الخصائص واستدعاء الأساليب والوصول إلى العناصر المفهرسة للقيم الاختيارية • إذا كانت أي وصلة تساوي nil، تُرجع السلسلة بأكملها nil • يكون نوع النتيجة اختياريًا دائمًا، حتى إذا لم تكن القيمة النهائية اختيارية عادةً • ادمجوا `?.` مع `??` لإنشاء أنماط واضحة للوصول الآمن مع قيمة افتراضية • فضّلوا `?.` على `!` لتجنب الانهيارات التالي: القيم الاختيارية المفكوكة التغليف ضمنيًا.

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

هل درس «العامل Optional Chaining ?. » مجاني؟

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

ماذا ستتعلم في «العامل Optional Chaining ?. »؟

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

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

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

كم من الوقت يستغرق درس «العامل Optional Chaining ?. »؟

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

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

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

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

  1. ربط if let وguard let
  2. الدمج عند nil والعامل الثلاثي مع Optionals
  3. العامل Optional Chaining ?.
  4. القيم الاختيارية المفكوكة ضمنيًا ومتى ينبغي تجنّبها
← العودة إلى Swift Academy