0Pricing
Swift Academy · درس

القيم الاختيارية المفكوكة ضمنيًا ومتى ينبغي تجنّبها

تعلّم متى تكون IUO مناسبة ومخاطر فك التغليف القسري

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

مرحبًا

يُصرَّح عن القيم الاختيارية المفكوكة التغليف ضمنيًا (IUOs) باستخدام `!` بدلًا من `?`. وهي تتصرف مثل القيم الاختيارية، لكنها تُفك تلقائيًا، ما يجعل استخدامها مريحًا لكنه خطير.

التصريح عن IUO

```swift var name: String! = "Alice" print(name) // "Alice" — auto-unwrapped print(name.count) // 5 ``` لا حاجة إلى استخدام صيغة صريحة لفك التغليف. لكن إذا كانت `name` تساوي nil عند الوصول إليها، فسينهار التطبيق.

متى تكون IUOs مناسبة

تكون IUOs مناسبة في الحالات التالية: 1. عندما تُعيَّن خاصية أثناء `viewDidLoad`، مثل منافذ UIKit 2. `@IBOutlet var button: UIButton!` 3. عند استخدام التهيئة على مرحلتين، بحيث يستحيل أن تكون القيمة nil بعد اكتمال الإعداد ```swift @IBOutlet weak var titleLabel: UILabel! ``` ينشئ Xcode الرمز `!` تلقائيًا للاتصالات مع Interface Builder.

خطر الانهيار

```swift var label: String! = nil print(label.count) // 💥 Fatal error: unexpectedly found nil ``` لا توفر IUOs أي حماية من nil — فالمصرّف يثق بكم. وإذا كنتم مخطئين، فسيتوقف التطبيق بسبب انهيار وقت التشغيل.

استخدام IUO كقيمة اختيارية

يمكن استخدام IUOs أيضًا كقيم اختيارية عادية: ```swift var x: Int! = nil if let value = x { print(value) } else { print("nil") } ``` يعمل الربط الاختياري بالطريقة نفسها، لكن فك التغليف التلقائي هو ما يجعل IUOs خطيرة.

الانتقال من IUO إلى Optional

في معظم التعليمات البرمجية الجديدة، استبدلوا `!` بـ `?`: ```swift // Before: var manager: DataManager! // After: var manager: DataManager? // or: var manager: DataManager // if set in init and never nil ``` لا تحتاج خصائص أنواع القيم التي تُعيَّن في `init` إلى IUOs.

الخصائص الكسولة كبديل

استخدموا `lazy` بدلًا من IUO عندما تحتاج الخاصية إلى تهيئة مؤجلة: ```swift lazy var heavyObject = HeavyObject() // initialised on first access ``` يُعد `lazy` آمنًا؛ فهو لا يساوي nil أبدًا، وإنما يؤجل التهيئة فقط.

استخدام IUO في مواضع إرجاع الدوال

قد تصادفون IUOs في واجهات برمجة التطبيقات القديمة: ```swift func getUser() -> User! { ... } ``` تعاملوا مع القيمة المُرجعة كقيمة اختيارية عادية، وافكوا تغليفها بأمان: ```swift if let user = getUser() { ... } ```

اختبار nil قبل الوصول

إذا اضطررتم إلى استخدام IUO، فتحققوا من القيمة في مواضع الوصول إليها: ```swift var outlet: UILabel! func updateUI() { guard outlet != nil else { return } outlet.text = "Updated" } ``` يحوّل ذلك انهيارًا مؤكدًا إلى عدم تنفيذ صامت، وهو أفضل في بيئة الإنتاج.

قاعدة عامة

اتبعوا التسلسل الهرمي التالي: 1. قيمة غير اختيارية (`let x = Value()`) — الخيار الأفضل 2. قيمة اختيارية عادية (`var x: T?`) — آمنة 3. قيمة كسولة (`lazy var x = Value()`) — تهيئة مؤجلة وآمنة 4. IUO (`var x: T!`) — لمنافذ IBOutlets والتهيئة على مرحلتين فقط تجنبوا استخدام IUOs في تعليمات Swift البرمجية الجديدة كلما أمكن.

تحقق سريع

ماذا يحدث عند الوصول إلى قيمة اختيارية مفكوكة التغليف ضمنيًا وتكون قيمتها `nil`؟

مراجعة

أهم النقاط: • تفك IUO (`Type!`) تغليفها تلقائيًا عند الوصول إليها، من دون الحاجة إلى `?` أو `!` • الوصول إلى قيمة nil يؤدي إلى انهيار فوري وقت التشغيل • تُستخدم فقط مع IBOutlets والتهيئة على مرحلتين • فضّلوا القيم الاختيارية العادية أو القيم غير الاختيارية أو `lazy` في التعليمات البرمجية الجديدة • يمكن استخدام IUOs مع `if let` لتحقيق الأمان تهانينا — لقد أكملتم دورة القيم الاختيارية وفك التغليف!

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

هل درس «القيم الاختيارية المفكوكة ضمنيًا ومتى ينبغي تجنّبها» مجاني؟

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

ماذا ستتعلم في «القيم الاختيارية المفكوكة ضمنيًا ومتى ينبغي تجنّبها»؟

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

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

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

كم من الوقت يستغرق درس «القيم الاختيارية المفكوكة ضمنيًا ومتى ينبغي تجنّبها»؟

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

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

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

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

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