Avatar ·

لماذا نحتاج إلى الخيارات المستخرجة ضمنيًا (Implicitly Unwrapped Optionals) إذا كنا متأكدين من وجود قيمة؟

مرحبًا بالجميع! لقد بدأت للتو في تعلم Swift، ويقلقني سؤال واحد. أقرأ الوثائق وصادفت شيئًا يسمى Implicitly Unwrapped Optionals (IUO) — الخيارات المستخرجة ضمنيًا. يتم تعريفها باستخدام علامة التعجب، على سبيل المثال: ```swift var name: String! = "Alice" ``` أفهم أن هذا هو optional يتم فتحه تلقائيًا عند الوصول إليه، دون الحاجة إلى كتابة `if let` أو `guard let`. لكن ما لا أفهمه هو: لماذا نحتاج إلى هذا النوع على الإطلاق؟ إذا كنا متأكدين من وجود القيمة (وهو ما تشير إليه علامة التعجب)، فلماذا لا نستخدم ببساطة نوعًا غير اختياري عادي، مثل `String`؟ ما الفرق؟ سمعت أن IUO تُستخدم غالبًا في خصائص UIKit، خاصة في القصص المصورة (storyboards)، على سبيل المثال: ```swift @IBOutlet weak var button: UIButton! ``` لماذا لا يمكننا ببساطة كتابة `UIButton`؟ فالزر سيكون موجودًا بالتأكيد إذا قمنا بتوصيله. أم أن هناك سحرًا مرتبطًا بدورة حياة العرض (view lifecycle)؟ أرجو التوضيح.