Interfaz de usuario rápida - galopando por Europa

imagen


22:35. Deleite


Visto las notas clave de WWDC 2019. La IU declarativa esperada realmente se hizo realidad, y este es realmente un evento universal para el mundo del desarrollo de iOS. "Necesitamos escribir un artículo sobre esto", pensé, y miles de desarrolladores de iOS más en todo el mundo están en exaltación.


05:30. Tutoriales


Interfaz de usuario de Swift: un nuevo marco desarrollado por Apple, escrito en Swift, diseñado para describir declarativamente la interfaz de usuario en el código.

Noté que cada año en términos de documentación, Yabloko se está enfriando cada vez más. Esta vez, bajo la interfaz de usuario de Swift, vieron algunos tutoriales completos con la adición paso a paso y la visualización interactiva del resultado a la vista, y al final agregaron cuidadosamente preguntas de control para consolidar los resultados. Bueno, solo un cuento de hadas! También hay enlaces a proyectos de ejemplo.



Bonito


No volveré a contar el tutorial en ruso, en una forma tan hermosa es mejor meterlo en la fuente original. Describiré mis impresiones y observaciones sobre toda esta historia con Swift UI y me complaceré un poco.


07:00 a.m. Instalación


El nuevo Xcode tiene un nuevo modo de edición de código: Editor y Canvas.



No vi el lienzo de inmediato; para esto no es suficiente descargar Xcode 11.0, también necesita actualizar Makos a 10.15. Sin él, Xcode funcionará, pero sin las delicias de un lienzo y, posiblemente, algo más.


Me alegré de que cuando selecciona el código, el elemento correspondiente en el lienzo también se resalta.


Nuevo eje, por ejemplo, lanzado. ¿Se está desmoronando? Pues sí. ¿Se cae la luz de fondo? No, por supuesto, lo mismo nunca ha sucedido en Xcode;) Pero el lienzo funciona, y los cambios en la vista se reflejan instantáneamente, si esta no es una tabla con celdas complejas.



09:22. Nuevo proyecto


Al crear un nuevo proyecto, la opción Usar Swift UI ahora está disponible y el proyecto se crea con la configuración adecuada.



El nuevo archivo SceneDelegate es SceneDelegate , en el que se crean la ventana y su vista raíz. Pero en AppDelegate , no hay una palabra sobre él. Pero hay un nuevo método que crea una 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) } 

Bueno, la Default Configuration sí está en Info.plist y SceneDelegate indica allí. Todo cayó en su lugar.



Pero volvamos a SceneDelegate : el lanzamiento tiene lugar en él.


 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 es un generic UIViewController regular que puede tener cualquier tipo de contenido bajo el nuevo protocolo View


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

El protocolo de visualización es obsceno:


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

Es decir, solo necesita implementar el body .
Pero el truco es que hay una gran cantidad de extensiones escritas en este protocolo de View , por ejemplo, para colgar gestos, para rastrear la aparición y desaparición de una vista de la pantalla, para sangrías, marcos y mucho, mucho más. Puedes ver todo esto en el muelle Ver | Documentación del desarrollador de Apple . ¡Esto significa que cualquier vista que haya creado (bajo el protocolo de View ) fuera de la caja obtiene un montón de todo tipo de superpoderes!


Pasemos a ContentView.swift .


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

Es simple: creamos una vista desde las Vistas y controles ya implementados | Documentación del desarrollador de Apple . Podría hacerlo más complicado usando varios contenedores Ver diseño y presentación | Documentación del desarrollador de Apple y la vista que ya creamos nosotros mismos.


Layout with Swift UI es una historia separada sobre la cual se escribirán muchos más materiales, y Apple también tiene un tutorial digno. No me detendré en eso. Volvamos a la segunda parte de ContentView.swift , existe dicho código:


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

Es obvio por el nombre que es él quien es responsable de lo que se muestra en el lienzo, y mostrará previews , en nuestro caso ContentView() .


Intentemos crear una pantalla con una tabla primitiva:


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

Eso es todo. Listo Simple, conciso, elegante. ¡Aquí está todo el encanto de una IU declarativa!


Se puede ver que List es una tabla debajo del capó. Pero no un UITableView, sino algunos UpdateCoalesingTableView.



Y también está claro que no hay diseño automático. No hay restricciones, todo está en cuadros, lo que significa que no existen estos sistemas complejos con ecuaciones lineales y un montón de cálculos. Pero, por otro lado, el diseño es adaptable y el marco se calcula de alguna manera; veamos en futuras sesiones de la WWDC exactamente cómo.


Interfaz de usuario rápida: ¿es una envoltura sobre UIKit? Sí y no al mismo tiempo, parece.


Joe Groff tuiteó lo siguiente:


"Algunas entidades son envoltorios sobre las vistas UI / NS, pero el hecho de que hagan esto y qué tipo de vista envuelvan es algo que puede cambiar".

Original:
Algunas cosas ajustan las vistas de UI / NS, pero si lo hacen, y qué tipo de vista ajustan, está sujeto a cambios. Lo mejor es pensarlo como algo distinto.


Lo que más noté:



11 a.m. Total


Por desgracia, todos estos encantos


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

Es decir, cambiar a ellos es abandonar los viejos ejes, que son demasiado radicales y carecen de preocupación para el usuario.


Estoy seguro de que el mecanismo sigue siendo burdo, habrá muchos más cambios y aparecerán muchos errores, y esto es natural. Pero en un año o dos será posible introducirlo en los productos.


Swift UI es una revolución directa en el mundo de las personas que se hacen llamar desarrolladores de iOS, y es genial que este nuevo camino, aunque no ideal, se haya abierto.


Mientras tanto, nada le impide usar esto en sus proyectos de mascotas, obtener su mano y obtener placer estético :)

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


All Articles