بروتوكولات سويفت واستخدامها لارسال البيانات بين الView Controllers - الجزء الثاني
بسم الله الرحمن الرحيم
مقدمة
استعرضنا في الجزء الأول طريقة ارسال البيانات بين الViews عن طريق انشاء Reference للView المستقبلة للبيانات وتغيير قيم متغيراتها.
في هذه المقالة، سنتعرف على ماهية البروتوكولات في سويفت وطريقة استخدامها لنقل البينات من أي View الى View اخر.
أولا: ماهو البروتوكول
اقتباسالبروتوكول هو عبارة عن مخطط (Blueprint) يحتوي على ميثودز، وخصائص ومتطلبات اخرى للقيام بمهمة معينة. يمكن لأي كلاس ان يتبنى أي بروتوكول ليقوم باضافة تعريف لهذه المتطلبات.
لتفهم بالبروتوكول بشكل صحيح، فكر به على أنه طريقة لتعريف ما يمكن للمتغير أن يفعله، عكس الكلاسات التي تعرف ماهية المتغير.
ثانيا: نقل البيانات بواسطة البروتوكول
في الجزء الأول رأينا كيف نقوم بنقل البيانات بين الView Controllers الى الأمام، والآن سنستعمل البروتوكول لنقل البيانات للView السابقة
سنقوم أولا بعمل السيت اب في الStoryboard كالتالي (سنسمي الView الأولى InitialVC والثانية FinalVC):
والآن ضمًن الView الاولى بداخل Navigation Controller لتصبح كالتالي:
سنقوم بانشاء Segue بين الView الأولى والثانية:
قم باضافة زر لكل View كالتالي: لا تنسى اضافة الSegue identifier لأننا سنستعمله لاحقا
والآن لننهي السيت أب، أضف الIBActions في الViewControllers لتصبح كالتالي:
كل ماسبق كان مجرد تجهيز للتالي
سنقوم الآن بتعريف البروتوكول والمتطلبات
وانت في كلاس الFinalVC:
- قم باضافة تعريف للبروتوكول باعلى الصفحة يحتوي على ميثود finishPassing بباراميتر String
- قم بتعريف متغير delegate من نفس نوع البروتوكول
- في ميثود الIBAction، قم باستخدام المتغير لنقل البيانات التي تريد نقلها الى الView الأولى (في هذا المثال نقلت سترينق)
سيصبح كلاس الFinalVC يبدو كالتالي:
1) أولا قمنا بانشاء بروتوكول (أو blueprint)، يحتوي على الميثود التي سنستعملها لاستقبال البيانات مستقبلا في الكلاس الأول
2) قمنا بانشاء متغير من نفس نوع البروتوكول ليحمل البيانات التي نريد ارسالها
3) عند الضغط على زر العودة، سنزود المتغير بالبيانات التي نريد نقلها الى الView الأولى
الى الآن، المتغير delegate لا يعلم الى اي كلاس سيقوم بنقل البيانات التي يحملها معه
سنقوم الآن بتبني البروتوكول في الكلاس الأول وتحديده كنقطة الوصول بالنسبة للمتغير
وانت في كلاس الInitialVC:
- اضف البروتوكول الى الكلاس الأول لتبنيه
- اضف الميثود prepareForSegue واستخدمها لتحديد الكلاس الحالي كنقطة الوصول للمتغير delegate من الكلاس الأخير
- وأخيرا لتبني البروتوكول بشكل كامل وصحيح، أضف الميثود finishPassing واستخدمها للتعامل مع البيانات المنقولة من المتغير delegate
سيصبح كلاس InitialVC يبدو كالتالي:
1) قمنا بتبني البروتوكول مبدئيا في الكلاس الأول
2) في الميثود prepareForSegue (التي سيتم استدعاءها قبل الانتقال الى الView الأخيرة)، قمنا باخبار المتغير delegate بان نقطة الوصول له هو الكلاس الحالي self
3) الى الآن ستلاحظ وجود error على الكلاس، لأنه يتوقع منك اضافة الميثود finishPassing التي ستتعامل مع البيانات التي ستصل من المتغير delegate، أضفناها وبداخلها طريقة للتعامل مع البيانات المنقولة عن طريق الparameter
والآن أصبحنا جاهزين للتجربة
لاحظ طباعة السترينق من الكلاس الأول كما حددنا في الميثود finishPassing، يمكنك أنت أن تقوم بالتعامل مع البيانات كما تشاء.
وصلنا الى نهاية موضوعنا اليوم، أترككم في حفظ الله ورعايته.
التعليقات (1)
السلام عليكم
لطفا استاذ .. هل هذه الاكواد مكتوبة بالجافا ؟
وما هو سويفت ؟ هل له علاقة بحوالات سويفت في المصارف ؟؟؟
عرض المزيد.. جديد مقالاتي
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !