1 of 40

SwiftUILeo Picado

INFORMÁTICOS EN CASA 08.06.20

2 of 40

Agenda

  • Acerca de mí
  • Estado de la cuestión
  • WWDC19
  • To Do
  • Recomendaciones

3 of 40

Leo Picado

  • Full-Stack de día
  • iOS de noche
  • Front-End en una vida anterior

4 of 40

Estado de la cuestión

5 of 40

Mundo Apple, plataformas:

  • macOS
  • iOS
  • iPadOS
  • watchOS
  • tvOS

6 of 40

Mundo Apple, lenguajes:

  • Objective-C
  • Swift

7 of 40

Mundo Apple, interfaz gráfica

  • Código
  • Interface Builder > Storyboards > Vistas

8 of 40

El problema con los Storyboards

  • Agrupan múltiples vistas
  • Muchas veces existe un único por aplicación (!)
  • Falsos positivos: retina / no-retina
  • Conflictos, muchos conflictos.

9 of 40

¿Aplicación multiplataforma?

  • Lógica de negocio en un Framework
  • Cada plataforma es un target
  • Cada target tiene su propio UI: Storyboards -> Vistas -> 😢

10 of 40

Aplicación sencilla

  • 10 Vistas: 3 user flows
  • 2 Targets
  • ~6 Storyboards
  • +2 personas en el equipo

= dolor de cabeza

11 of 40

Manejo de los datos

12 of 40

(UI|App|Watch)Kit

  • Dirigido por eventos�
  • Model ViewController

The core app objects

13 of 40

Flujo normal

  1. Vista despliega dato
  2. Usuario interactúa con control
  3. Dato se envían hacia el modelo (VC)
  4. Modelo interactúa con el dato
  5. Notifica al controlador
  6. Vista recibe notificación para refrescarse

14 of 40

¿Cuál es el problema?

  • Código repetitivo para enviar y recibir notificaciones
    • Imperfecto
    • Callback hell
  • Mezcla de responsabilidades
  • Massive View Controllers
  • Lento ciclo de retroalimentación

15 of 40

Out of order error

16 of 40

¿Programación Reactiva en iOS?

  • RxSwift
  • ReactiveCocoa
  • Esfuerzos de la comunidad
  • Batallando contra los frameworks

17 of 40

WWDC19

18 of 40

Combine

19 of 40

Framework reactivo

  • Escrito en Swift
  • Swifty
  • S t r e a m s de datos

20 of 40

Publishers

  • [1, 2, 3].publisher
  • Just(“único valor”)
  • PassthroughSubject<Int, Error>

21 of 40

Operadores

  • map
  • flatMap
  • compactMap
  • filter
  • merge
  • throttle
  • scan
  • dropFirst
  • reduce
  • zip

22 of 40

SwiftUI

23 of 40

Interface Builder + UI en código

  • Framework para Interfaces
  • Editor visual
  • Interfaz escrita en Swift
  • SwiftUI no es un generador de código
  • Multiplataforma

24 of 40

¿Cómo se crea una vista en SwiftUI?

  • View
    • ViewModifier
    • ViewModifier
    • ViewModifier

Text(“Hola Mundo”)� .padding()� .foregroundColor(.pink)� .background(Color.black)

25 of 40

El orden de los ViewModifiers importa

Text(“Hola Mundo”)� .padding()� .foregroundColor(.pink)� .background(Color.black)

Text(“Hola Mundo”)� .foregroundColor(.pink)� .background(Color.black)� .padding()

26 of 40

¿Qué hace uno para aprender a usar una nueva tecnología?

27 of 40

To Do

28 of 40

Meta

  • Tarea:
    • Título
    • Estado�
  • CRUD de Tareas

29 of 40

Puntos extra

  • Filtrar tareas
  • Re-ordenar tareas

30 of 40

Al Batimóvil

31 of 40

Resumen

  1. Desplegar la lista de tareas
  2. Agregar elementos
  3. Modificar elementos
  4. Remover elementos

32 of 40

Manejo de datos en SwiftUI

  • @State: la vista es dueño
  • @Binding: referencia a un @State externo
  • @EnvironmentObject: la aplicación retiene una única instancia del objeto y todas las vistas tienen accesso
  • @ObservedObject: similar al anterior, pero debe ser pasado entre vistas

33 of 40

Puntos extra

34 of 40

SwiftUI all the things!

35 of 40

“Vamo a calmarno” - Squirtle

36 of 40

Fortalezas

No más Storyboards

Canvas

Integrable con proyectos existentes

Fácil de usar

Multiplataforma

iOS 13+

Canvas solo funciona en macOS Catalina

Crashes de Canvas

Ocupa Combine

Debilidades

37 of 40

Recomendaciones

38 of 40

Recomendaciones

  • No está listo para producción
  • Tener en cuenta el orden los ViewModifiers
  • Los refactors no cambian los previews
  • La accessibilidad ocupa un poco de ayuda
  • Coordinators

39 of 40

Recursos

40 of 40

Muchas gracias