البرمجة

حل مشكلة Binary Operator ‘===’ في Swift 3.0

الخطأ الذي يظهر في الشيفت 3.0 يتعلق بعملية المقارنة باستخدام العامل ‘===’ في دالة prepare(for segue: UIStoryboardSegue, sender: Any?) التي تم استخدامها في سويفت 2.2 ولكن لم يعد متوفراً في الإصدار 3.0. هذا الخطأ يحدث لأنَّ نوع البيانات للمُرسِل (sender) المُمكنة قد تغيَّرت.

في سويفت 2.2، كان من الممكن استخدام العامل ‘===’ للمقارنة بين القيم المختلفة بما في ذلك القيم الاختيارية (Optionals) وكائنات UIBarButtonItem. ومع ذلك، في الإصدار 3.0 وما بعده، تم تغيير التحقق من الهوية (Identity) والمقارنة لتكون أكثر صرامة.

لحل هذا الخطأ، يمكننا استخدام قياس الهوية (Identity comparison) بشكل مختلف. بدلاً من استخدام العامل ‘===،’ يمكننا استخدام طريقة أكثر دقة للتحقق من هوية الكائنات. وذلك باستخدام الدوال المتاحة في UIKit لمقارنة الكائنات بشكل صحيح.

لذلك، يمكننا تعديل الكود كما يلي:

swift
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let button = sender as? UIBarButtonItem, button == saveButton { // يتم التحقق مما إذا كان المُرسِل هو زر الحفظ (saveButton) // قم بتنفيذ الإجراءات المطلوبة } else if let button = sender as? UIBarButtonItem, button == closeButton { // يتم التحقق مما إذا كان المُرسِل هو زر الإغلاق (closeButton) // قم بتنفيذ الإجراءات المطلوبة } }

في هذا التعديل، نقوم أولاً بالتحقق مما إذا كان المُرسِل (sender) من نوع UIBarButtonItem باستخدام عملية التحويل الآمن (as?)، ثم نقوم بالمقارنة بينه وبين الأزرار المحددة (saveButton و closeButton) باستخدام عامل المساواة ‘==’. هذا يُتيح لنا التحقق من هوية الكائنات بشكل صحيح دون إثارة أخطاء تشغيلية.

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

بالطبع، لنكمل المقال بمزيد من التوضيح والشروحات:

بعد التعديلات التي قمنا بها في الكود، يتم الآن التحقق من نوع المُرسِل (sender) باستخدام العبارة as? UIBarButtonItem، وهذا يُتيح لنا الحصول على الكائن كما لو كان من نوع UIBarButtonItem، مع التأكد من عدم حدوث أخطاء تشغيلية في حال كان المُرسِل ليس من هذا النوع.

ثم، يتم استخدام العملية == للمقارنة بين الكائن الذي تم الحصول عليه (الذي يجب أن يكون UIBarButtonItem) وبين الأزرار المحددة، مثل saveButton و closeButton، وهذا يسمح لنا بالتأكد من أن المُرسِل هو الزر الذي نحتاجه بالفعل.

عندما يتم اختيار زر معين على واجهة المستخدم وتُشغَّل العملية المناسبة (مثل الضغط على زر الحفظ أو زر الإغلاق)، سيتم إرسال المرجع (reference) إلى الزر المناسب كمُرسِل إلى دالة prepare(for:sender:)، وباستخدام التعديلات التي قمنا بها في الكود، يمكننا الآن التحقق من المرجع المُرسَل بشكل صحيح وتحديد الزر المُناسب بناءً على ذلك.

بهذا، نحن الآن قادرون على تجاوز الخطأ الذي كان يحدث في الشيفت 3.0، ونستطيع استخدام دالة prepare(for:sender:) بنجاح للتعامل مع الزر المُختار بشكل صحيح، مما يسهِّل عملية التحكم في تدفق التطبيق وتنفيذ الإجراءات المناسبة بناءً على اختيار المستخدم.

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