البرمجة

فهم Optional في لغة البرمجة Swift

عند استخدام الرمز ! بجانب نوع المتغير في سويفت، يعني هذا أن المتغير هو optional ولكنه لن يكون nil في وقت تشغيل البرنامج. وعند استخدام ? يعني أن المتغير هو optional ويمكن أن يكون nil في أي وقت.

في الشفرة التي قدمتها، قمت بتعريف p02 كـPerson! و p03 كـPerson? وقمت بتعيينهما إلى nil. عندما تقوم بطباعة المتغير p03، فإنه يطبع nil بشكل صحيح لأنه optional ويمكن أن يكون nil. أما عندما تحاول طباعة p02، فإن البرنامج يثير خطأ fatal error: unexpectedly found nil while unwrapping an Optional value لأنه تم تعيين p02 إلى nil ولكنه تم تعريفه بنوع Person!، مما يعني أنه يجب أن يحتوي على قيمة غير nil.

لحل هذه المشكلة، يمكنك تأكد أولاً من أن قيمة p02 ليست nil قبل طباعتها. يمكنك القيام بذلك بواسطة التحقق من القيمة بشكل مثل if let كما هو موضح في الشفرة التالية:

swift
var p02: Person! = nil var p03: Person? = nil if p02 == nil { print("p02 is nil") } else { print(p02) // تمت طباعة p02 دون مشكلة } if p03 == nil { print("p03 is nil") } else { print(p03) }

باستخدام if let يمكنك ضمان أن المتغير p02 ليس nil قبل طباعته، وبالتالي تجنب الخطأ الذي تواجهه.

المزيد من المعلومات

في لغة البرمجة Swift، تُستخدم الـ Optional للإشارة إلى قيمة يمكن أن تكون nil، أي عدم وجود قيمة. يمكن تعريف المتغيرات كـ Optional باستخدام علامتي الاستفهام ? والتعجب !.

  1. Optional باستخدام ?: يستخدم عندما يكون لديك متغير يمكن أن يحتوي على قيمة أو nil. عند الوصول إلى قيمة متغير Optional، يجب عليك فحصها أولاً باستخدام if let أو guard let قبل استخدامها، لتجنب الأخطاء التي قد تحدث بسبب قيمتها nil.

  2. Optional باستخدام !: يستخدم عندما تكون متأكدًا من أن المتغير سيحتوي على قيمة في وقت التشغيل ولن يكون nil. إذا كان المتغير nil عند استخدام !، ستحدث أخطاء تشغيلية (runtime errors) مثل الخطأ الذي واجهته في حالة المتغير p02.

باستخدام !، تُفرض تصريحًا (force unwrapping) لـ Optional، مما يعني أنك تقول للكود “أنا أعرف أن هذا القيمة ليست nil، لذا قم بفتحها مباشرة دون فحص”. وهذا يزيد من خطورة الأخطاء التي يمكن أن تحدث، لذلك ينصح بعدم استخدامه إلا عندما تكون واثقًا من عدم وجود قيمة nil.

للحفاظ على السلامة وتجنب الأخطاء، يُفضل استخدام if let أو guard let للتأكد من وجود قيمة قبل الوصول إليها في حالة المتغيرات Optional.

زر الذهاب إلى الأعلى