سويفت واجهة المستخدم - الراكض في جميع أنحاء أوروبا

صورة


22:35. بهجة


تم الاطلاع على ملاحظات WWDC 2019 الرئيسية. أصبحت واجهة المستخدم التصريحية المتوقعة حقيقة ، وهذا حقًا حدث عالمي لعالم تطوير iOS. "أعتقد أننا بحاجة إلى كتابة مقال حول هذا الموضوع" ، فكرت ، وهناك الآلاف من مطوري iOS حول العالم في تمجيد.


05:30. الدروس


Swift UI - إطار جديد تم تطويره من قِبل Apple ، مكتوبًا في Swift ، وهو مصمم لوصف UI في التعليمات البرمجية.

لقد لاحظت أن Yabloko تزداد برودة وبرودة كل عام من حيث الوثائق. هذه المرة ، تحت Swift UI ، رأوا بعض البرامج التعليمية كاملة مع إضافة خطوة بخطوة وعرض تفاعلي للنتيجة على العرض ، وفي النهاية أضافوا بعناية أسئلة التحكم لتعزيز النتائج. حسنا ، مجرد حكاية خرافية! هناك أيضا روابط لمشاريع المثال.



! جميلة


لن أقوم برواية البرنامج التعليمي باللغة الروسية ، فمن الأفضل في هذا الشكل الجميل أن نضعه في المصدر الأصلي. سوف أصف انطباعاتي وملاحظاتي حول هذه القصة بأكملها مع Swift UI وانغمس فيها قليلاً.


07:00 صباحًا تركيب


يحتوي Xcode الجديد على وضع جديد لتحرير الكود - Editor And Canvas.



لم أشاهد اللوحة في وقت واحد - ولهذا لا يكفي تنزيل Xcode 11.0 ، فأنت بحاجة أيضًا إلى تحديث Makos إلى 10.15. بدونها ، سيعمل Xcode ، ولكن بدون مسرات قماش ، وربما شيء آخر.


كنت سعيدًا أنه عند تحديد الرمز ، يتم أيضًا تمييز العنصر المقابل في اللوحة القماشية.


محور جديد ، أطلقت exampl'y. هل تنهار؟ حسنًا ، نعم. هل تسقط الإضاءة الخلفية؟ لا ، بالطبع - لم يحدث الشيء نفسه في Xcode ؛) لكن اللوحة تعمل ، وتنعكس تغييرات العرض على الفور ، إذا لم تكن هذه جدولًا يحتوي على خلايا معقدة.



09:22. مشروع جديد


عند إنشاء مشروع جديد ، أصبح خيار استخدام Swift UI متاحًا الآن ويتم إنشاء المشروع بالتهيئة المناسبة.



SceneDelegate ملف SceneDelegate الجديد على SceneDelegate ، حيث يتم إنشاء النافذة وطريقة عرض الجذر. ولكن في AppDelegate ، لا توجد كلمة عنه. ولكن هناك طريقة جديدة تنشئ تكوين UISceneConfiguration :


 func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { // Called when a new scene session is being created. // Use this method to select a configuration to create the new scene with. return UISceneConfiguration(name: «Default Configuration», sessionRole: connectingSceneSession.role) } 

حسنًا ، Default Configuration نفسه موجود في Info.plist SceneDelegate إلى SceneDelegate هناك. كل شيء سقط في مكانه.



لكن العودة إلى SceneDelegate - الإطلاق يحدث فيه.


 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`. // If using a storyboard, the `window` property will automatically be initialized and attached to the scene. // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead). // Use a UIHostingController as window root view controller let window = UIWindow(frame: UIScreen.main.bounds) window.rootViewController = UIHostingController(rootView: ContentView()) self.window = window window.makeKeyAndVisible() } 

UIHostingController هو UIHostingController generic UIViewController منتظم يمكن أن يحتوي على أي نوع من المحتوى بموجب بروتوكول View الجديد


 open class UIHostingController<Content> : UIViewController where Content : View { /// } 

بروتوكول View فاحش:


 public protocol View : _View { associatedtype Body : View var body: Self.Body { get } } 

وهذا هو ، فهو يحتاج فقط إلى تنفيذ body .
ولكن الحيلة تكمن في أن الكثير من الامتدادات مكتوبة على بروتوكول View هذا ، على سبيل المثال ، للإيماءات المعلقة ، لتتبع مظهر واختفاء العرض من الشاشة ، المسافات البادئة ، الإطارات ، وأكثر من ذلك بكثير. تستطيع أن ترى كل هذا في قفص الاتهام مشاهدة | وثائق المطور أبل . هذا يعني أن أي عرض قمت بإنشائه (بموجب بروتوكول View ) خارج الصندوق يحصل على مجموعة من جميع أنواع القوى العظمى!


دعنا ContentView.swift إلى ContentView.swift .


 struct ContentView : View { var body: some View { Text(«Hello World») } } 

الأمر بسيط: نقوم بإنشاء طريقة عرض من طرق العرض والتحكم التي تم تنفيذها بالفعل | وثائق المطور أبل . يمكن أن يجعل الأمر أكثر تعقيدًا باستخدام حاويات مختلفة توثيق مطور Apple والرأي الذي أنشأناه بالفعل.


تعد Layout with Swift UI قصة منفصلة حول العديد من المواد التي سيتم كتابتها ، كما تمتلك Apple أيضًا برنامجًا تعليميًا رائعًا. لن أسهب في ذلك. دعنا نعود إلى الجزء الثاني من ContentView.swift ، هناك مثل هذا الرمز:


 #if DEBUG struct ContentView_Previews : PreviewProvider { static var previews: some View { ContentView() } } #endif 

من الواضح من الاسم أنه هو المسؤول عن ما يتم عرضه في اللوحة - previews ، في حالتنا ، ContentView() .


دعنا نحاول إنشاء شاشة مع جدول بدائي:


 struct ContentView : View { var birds: [Birds] = [] var body: some View { List(birds) { bird in Text(verbatim: bird.name) } } } 

هذا كل شيء. القيام به. بسيطة ، موجزة ، أنيقة. هنا هو كل سحر UI التعريفي!


يمكن ملاحظة أن List عبارة عن طاولة أسفل الغطاء. ولكن ليس UITableView ، ولكن بعض UpdateCoalesingTableView.



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


Swift UI - هل هو غلاف على UIKit؟ نعم ولا في نفس الوقت ، على ما يبدو.


قام جو جروف بتغريد ما يلي:


"بعض الكيانات عبارة عن مغلفات فوق طرق عرض UI / NS ، لكن حقيقة قيامهم بذلك ونوع الرؤية التي يلتفون عنها هي شيء يمكن أن يتغير."

الأصل:
تقوم بعض الأشياء بتغطية طرق عرض UI / NS ، ولكن ما إذا كانت تفعل ذلك ونوع طريقة العرض التي يتم التفافها ، عرضة للتغيير. من الأفضل التفكير في الأمر كشيء مميز.


ما لاحظته أكثر:



11 صباحًا في المجموع


للأسف ، كل هذه السحر


 @available (iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *) 

وهذا يعني أن التحول إليهم هو التخلي عن المحاور القديمة ، التي تعتبر جذرية وخالية من الاهتمام للمستخدم.


أنا متأكد من أن الآلية لا تزال خامًا ، وسيكون هناك العديد من التغييرات ، والكثير من الأخطاء ستظهر ، وهذا أمر طبيعي. ولكن في غضون عام أو عامين سيكون من الممكن تنفيذه في المنتج.


Swift UI هي ثورة مباشرة في عالم الأشخاص الذين يطلقون على أنفسهم مطوري iOS ، ومن الرائع أن هذا الطريق الجديد ، وإن لم يكن مثاليًا ، قد فتح.


في غضون ذلك ، لا شيء يمنعك من استخدام هذا في مشاريع الحيوانات الأليفة ، والحصول على يدك والحصول على المتعة الجمالية :)

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


All Articles