تغيير عقلك مع SwiftUI

صورة

في الأسبوع الماضي ، رأيت أن المجتمع يحاول نقل أنماط التطوير التي أثبتت جدواها من UIKit إلى SwiftUI. لكنني متأكد من أن أفضل طريقة لكتابة تعليمات برمجية فعالة باستخدام SwiftUI هي نسيان كل شيء عن UIKit وتغيير تفكيرك تمامًا من حيث تطوير واجهة المستخدم. سأتحدث هذا الأسبوع عن الاختلافات الرئيسية بين التطوير باستخدام UIKit و SwiftUI.

تعريف الاختلافات


UIKit هو إطار عمل يحتمه الحدث لإنشاء واجهات المستخدم لمنصة iOS. هذا يعني أنه يجب عليك التعامل مع جميع تغييرات الحالة أثناء الأحداث مثل تحميل طريقة عرض ، والنقر على زر ، وما إلى ذلك. ومن العيوب الكبيرة لهذا النهج صعوبة مزامنة واجهة المستخدم مع حالته. بمجرد أن تتغير الحالة ، يجب عليك إضافة / حذف / إظهار / إخفاء طرق العرض يدويًا ومزامنتها مع الحالة الحالية للتطبيق.

SwiftUI هو إطار تعريفي لإنشاء واجهات المستخدم لجميع منصات Apple. الكلمة الأساسية في هذه الحالة تعريفية. التعريفي يعني أن المطور بحاجة إلى إعلان ما يريد تحقيقه ، وسيهتم الإطار بهذا. يعرف الإطار أفضل طريقة لتقديم واجهة المستخدم.

UI = f(state) 

في SwiftUI ، تعد واجهة المستخدم وظيفة لحالتها. هذا يعني أنه كلما تغيرت حالة العرض ، فإنها تحسب خاصية الجسم وتولد طريقة عرض جديدة. النظر في المثال التالي.

 struct ContentView: View { @ObservedObject var store: Store var body: some View { Group { if store.isLoading { Text("Loading...") .font(.subheadline) } else { Image("photo") .font(.largeTitle) } } } } 

في المثال أعلاه ، هناك طريقة عرض تعرض النص "تحميل ..." وتعرض الصور في نهاية التنزيل. ObserverObject هي حالة العرض ، وبمجرد أن يتغير ، يقوم SwiftUI بإعادة حساب خاصية الجسم وتعيين طريقة عرض جديدة. أثناء التطوير باستخدام UIKit ، من الضروري إخفاء / إظهار عناصر التسلسل الهرمي يدويًا ، ولكن في SwiftUI ليست هناك حاجة لإضافة / إزالة مؤشر تحميل. هناك عدة طرق في SwiftUI لوصف حالة المشاهدة ، لمعرفة المزيد عنها ، ألق نظرة على " Wrappers Property في SwiftUI ".

الآن سنلقي نظرة فاحصة على ما يحدث عندما تتغير حالة العرض. SwiftUI له بصمة التسلسل الهرمي الحالي للعروض ، وبمجرد تغير حالته ، فإنه يحسب طريقة عرض جديدة. يطبق SwiftUI خوارزميات المقارنة لفهم الاختلافات وإضافة / إزالة / تحديث العروض الضرورية تلقائيًا. بشكل افتراضي ، يستخدم SwiftUI الصورة الانتقالية للداخل / الخارج لإظهار / إخفاء المشاهدات ، لكن من الممكن أيضًا تغيير الانتقال إلى أي رسوم متحركة أخرى يدويًا. لمعرفة المزيد حول الانتقال والرسوم المتحركة في SwiftUI ، ألق نظرة على مقالتي " الرسوم المتحركة في SwiftUI ".

عرض التسلسل الهرمي


دعنا نتحدث عن التسلسل الهرمي للمشاهدات وكيف يعرض SwiftUI بالفعل هيكل المشاهدات. أول شيء أود ذكره هو أن SwiftUI لا يعرض بنية العرض عن طريق التعيين الفردي. من الممكن استخدام أكبر عدد ممكن من حاويات العرض ، ولكن في النهاية ، لا يعرض SwiftUI سوى تلك المشاهدات المنطوية على العرض. هذا يعني أنه يمكنك استخراج منطقهم في تمثيلات صغيرة ، ثم تكوينهم وإعادة استخدامهم في التطبيق. لا تقلق ، فإن أداء التطبيق في هذه الحالة لن تعاني. لمعرفة المزيد حول إنشاء طرق عرض في SwiftUI ، ألق نظرة على هذه المقالة .

أفضل طريقة لفهم التسلسل الهرمي للتمثيلات المعقدة في SwiftUI هي عرض نوعه. يستخدم SwiftUI نظام كتابة ثابتًا لتحديد الفرق بسرعة كافية. أولاً وقبل كل شيء ، يتحقق من نوع العرض ، ثم يتحقق من قيم مكونات العرض. أنا لست من عشاق استخدام الأفكار في مدونة العمل ، لكنها مفيدة للغاية في عملية التعلم.

 print(Mirror(reflecting: ContentView(store: .init()).body)) // Group<_ConditionalContent<Text, ModifiedContent<Image, _EnvironmentKe 

باستخدام هيكل Mirror ، يمكنك عرض النوع الفعلي لنص ContentView ومعرفة كيفية عمل SwiftUI.

النتائج


هذا الأسبوع ، تعلمنا الفرق الرئيسي بين UIKit و SwiftUI وفحصنا بالتفصيل خوارزمية المقارنة في SwiftUI. أتمنى أن تستمتعوا بالمقال. شكرا على القراءة ونراكم الأسبوع المقبل!

Source: https://habr.com/ru/post/ar477560/


All Articles