Optionals
Optionals
Optionals درس مجاني في Swift Academy على CoddyKit. هذا هو الدرس 1 من أصل 1. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Swift Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Swift Academy 1 دروس في المجموع.
مقدمة
مرحبًا،
يُستخدم للتعبير عن أن متغيرًا اختياريًا قد لا تكون له قيمة.
إذا كانت لمتغير من النوع الاختياري قيمة، فسيُفك تغليفه ويُستخدم. وإلا فلن تكون له قيمة.
استخدام Optional مع أنواع عديدة في Swift
يمكن مقارنة Optional بمؤشر nil في Obj-C. ومع ذلك، لا يكون مؤشر nil صالحًا إلا لأنواع الكائنات.
تُستخدم Optionals في Swift ليس مع أنواع الكائنات فقط، بل أيضًا مع Struct وenum والأنواع البسيطة.
var optionalVar: String?
// optionalVar is automatically set to nil]
/*
Since we define it as optional without
assigning a value, the variable
automatically takes the value of nil.
*/nil في Swift وnil في Obj-C ليسا متطابقين
إن nil في Swift وnil في Obj-C ليسا متطابقين.
يشير مؤشر nil في Obj-C إلى عدم وجود الكائن. أما في Swift، فلا يُعد nil مؤشرًا. ويشير nil في Swift إلى عدم وجود البيانات، كما يدعم أنواعًا أخرى، وليس نوع الكائنات فقط.
force unwrap
يمكن الوصول إلى المتغيرات التي نعرّفها على أنها اختيارية باستخدام أسلوب force unwrap.
باستخدام معامل التعجب، يمكن إجبار الشيفرة على فك التغليف، لكن استخدامه عمومًا ليس ممارسة جيدة.
إذا لم تكن البيانات المُشار إليها متاحة أثناء استخدام force unwrap، فسنحصل على خطأ وقت التشغيل.
let convertedNumber : Int? = 123
if convertedNumber != nil {
print("convertedNumber has an integer value of \(convertedNumber!).")
}
// Prints "convertedNumber has an integer value of 123."الوصول إلى Optional باستخدام Optional Binding
الوصول إلى Optional باستخدام Optional Binding
باستخدام كتلة if let، يمكننا الوصول إلى قيمة المتغير الاختياري من خلال إسنادها إلى ثابت أو متغير.
يُعد استخدام هذه الطريقة بدلًا من force unwrap أسلوبًا أكثر أناقة.
var possibleNumber : String? = "10"
if let actualNumber = possibleNumber {
print(actualNumber)
}مثال
if let firstNumber = Int("4"), let secondNumber = Int("42"),
firstNumber < secondNumber && secondNumber < 100 {
print("\(firstNumber) < \(secondNumber) < 100")
}
// Prints "4 < 42 < 100"
/*
If at least one of them is false,
it will not be entered in the if blog.
*/
Implicitly Unwrapped Optionals
Implicitly Unwrapped Optionals
في بعض الحالات، تُسنَد القيمة الاختيارية في المرحلة الأولى، ومن المؤكد في الحالات اللاحقة أنها ليست nil.
في مثل هذه الحالات، بدلًا من استخدام Optional (?)، نعبّر عنها باستخدام المعامل (!) للإشارة إلى أن هذه القيمة ليست nil بالتأكيد.
يُطلق على هذا النوع من التعريف اسم 'Implicitly Unwrapped Optionals'.
مفكوك ضمنيًا
مفكوك ضمنيًا
أكثر مواضع استخدامه شيوعًا هي مرحلة تهيئة الفئة.
بخلاف القيم الاختيارية التقليدية، لا نحتاج إلى فك تغليف المتغيرات المعبَّر عنها ضمنيًا على أنها مفكوكة.
let possibleString: String? = "An optional string."
// requires an exclamation mark
let forcedString: String = possibleString!
let assumedString: String! = "An implicitly unwrapped optional string."
// no need for an exclamation mark
let implicitString: String = assumedString مثال
إذا أسندنا nil إلى متغيرات من هذا النوع، فسنحصل على أخطاء وقت التشغيل.
لنأخذ مثالًا
/*
We can use it during optional binding or we can check for nil.
So we use implicitly unwrapped optional
in the same way we use classic optional.
*/
var assumedString: String! = nil
if let definiteString = assumedString {
print(definiteString)
}
// Prints "An implicitly unwrapped optional string."تحذير
إذا كان من المحتمل أن تكون قيمة متغير ما nil، فلا يُستخدم implicitly unwrapped optional.
عامل الدمج مع Nil
عامل الدمج مع Nil
يوفر طريقة سهلة لإلغاء تغليف الأنواع الاختيارية.
لنره في مثال.
let defaultColorName = "red"
// defaults to nil
var userDefinedColorName: String?
var colorNameToUse = userDefinedColorName ?? defaultColorName
/*
userDefinedColorName is nil,
so colorNameToUse is set to the default of "red"
*/
// a != nil ? a! : b
/*
We can think of it as a shortcut to the above expression.
A checks if a is nil, if a is not nil, it unwrap and eturn,
otherwise it returns the default value, ie b.
*/
تهانينا
تهانينا 🎉
يُعد مفهوم القيم الاختيارية أحد أهم ميزات Swift. وباستخدام القيم الاختيارية، نتخلص من عمليات التحقق من Nil، ونكتب تعليماتنا البرمجية بصورة أكثر أناقة، ونجعل تطبيقاتنا أكثر أمانًا.
نراكم في الدرس التالي 🥳

الأسئلة الشائعة
هل درس «Optionals» مجاني؟
نعم — نص درس «Optionals» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Swift Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Swift Academy 1 دروس في المجموع.
ماذا ستتعلم في «Optionals»؟
Optionals تتمرن على Swift Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Swift Academy؟
لا تُشترط خبرة سابقة. Swift Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 1.
كم من الوقت يستغرق درس «Optionals»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Swift Academy هذا؟
نعم. كل درس في Swift Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.