
En mayo, Google I / O 2019 anunció un nuevo marco para desarrollar una IU declarativa de Android llamada Jetpack Compose. Un mes después, en WWDC 2019, se anunció un marco de IU declarativo para iOS llamado SwiftUI. Después de estas conferencias, quedó claro para qué se estaba esforzando el desarrollo móvil, y quería averiguar qué se puede hacer con estos marcos en este momento y cuál es la diferencia entre ellos.
Revisión cursiva
Después de una revisión rápida, quedó claro que IOS tenía una documentación genial.

y la completa falta de documentación en Android. Para familiarizarse con el marco en la página oficial, se recomienda ver la aplicación de demostración.
Hola mundo
Comenzar a usar SwiftUI es muy simple, solo actualice macOS a beta, instale Xcode 11 Beta y cree un nuevo proyecto, mientras selecciona la casilla de verificación "Usar SwiftUI".

En el caso de Jetpack Compose, todo es más complicado. Necesitamos descargar la última versión de Jetpack. Y basándose en el módulo ui-demos, al escribir, descubra cómo trabajar con el marco y qué dependencias se necesitan. Una primera impresión muy triste de Compose en comparación con SwiftUI.
Componer ejemplo@Composable fun HelloWorld() { Text(text = "Hello world") }
Ejemplo de SwiftUI struct ContentView: View { var body: some View { Text("Hello SwiftUI!") } }
El diseño de la interfaz de usuario se ve muy similar, lo cual es lógico, ya que tiende a una apariencia declarativa.
Editor visual
SwiftUi viene con un editor visual (lienzo),
cual:
- vuelve a dibujar la pantalla inmediatamente después de cambiar el código;

- Capaz de mostrar varios dispositivos a la vez;

- hace posible cambiar los atributos ui de elementos desde el editor;
- y lo más interesante y genial - puedes ejecutar el código ui desde el editor y ver cómo funciona la pantalla.
En el caso de Jetpack Compose, no hay editor visual.
Trabajar con listas
Para trabajar en SwiftUI solo cree una vista de la cadena
struct ListRow: View { let number:Int var body: some View { Text.init(verbatim: "Text \(number)") } }
y pegar en la lista.
List(Array(0...44)) { number in ListRow.init(number: number) }
La lista esta lista.
Componer aún no tiene un widget de lista. A primera vista, puede usar Column.
Column { listOf( "", "", "", "", "", "", "", "", "" ) .forEach { name -> Text(text = name, style = +themeTextStyle { h2 }) } }
Pero él no se está desplazando.
Lo que es más triste, incluso el ejemplo de Google no está finalizado y no se desplazará.
Ver jerarquía
En SwiftUI, el elemento raíz para reemplazar el UIViewController es el nuevo componente Ver con un nuevo ciclo de vida. Esto sugiere que Apple, después de analizar los pros y los contras de la implementación de UIViewController, trató de hacer todo de una manera nueva, implementando las mejores características.
struct ContentView : View { var body: some View { Text("ContentView2 ") .onDisappear(){ print("onDisappear") } .onAppear{ print("onAppear") } } }
En el caso de Compose, los elementos raíz siguen siendo la buena Actividad o Fragmento anterior, en lugar de la carga XML habitual.
class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) } }
Descargando widgets de Compose.
class ComposeActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { CraneWrapper { MaterialTheme { Text(text = "Hello world") } } } } }
Esto lleva al hecho de que Android no elimina la vista raíz heredada. Es solo que los antiguos componentes de la interfaz de usuario ya no se comunican con XML, sino con widgets de composición.
La navegación
Para navegar en SwiftUI, debe especificar qué vista se debe abrir haciendo clic en el botón.
NavigationButton(destination: LandmarkDetail()) { LandmarkRow(landmark: landmark) }
No hay implementación de navegación dentro de Compose. Pero probablemente no debería serlo, ya que el elemento raíz es Actividad o Fragmento, en el que la navegación se
ha implementado durante mucho tiempo.
Versión soportada
SwiftUI funciona con iOS 13, que saldrá en septiembre, que ya no será compatible con iPhone 5S, iPhone6, iPhone 6 Plus. Los desarrolladores deben pensar en cómo estarán listos para abandonar estos modelos.
Componer planes para ser compatible con cualquier versión de Android.
Conclusiones
Después de las conferencias, pensé que había dos nuevos marcos poderosos para la interfaz de usuario. Como resultado, resultó que Apple tomó una decisión genial, de la cual muchos tienen un "estado de exaltación". Y Google anunció un marco que es tan tosco que no está claro cuántos puntos funcionarán incluso a nivel conceptual.