SlideShare una empresa de Scribd logo
1 de 65
0
Swift’s migration. The true
Story
Miguel Olmedo Camacho
@molmedoc
Enrique Fau de Casa-Juana
@kikefau
1
2
Motivaciones
3
Motivaciones
4
¿Por qué?
● Nuevo lenguaje
● Sintaxis moderna
● Más rápido
● Fuertemente tipado
● Genéricos
● Enfoque funcional
● Closures VS Blocks
● Refactor (Legacy code)
Motivaciones
5
Punto de partida
6
● Aplicación nativa (universal)
● iOS >= 6
● ≃ 1.000 ficheros
● ≃ 140.000 líneas de código
● 12 bibliotecas de terceros (pods)
● Poco modularizada
● Deuda técnica
Punto de partida
7
El Camino
8
Estrategia de
migración
9
Estrategia de migración
● Migración incremental
● No congelamos nuevos desarrollos
● Nuevos desarrollos en Swift
● Pair programming - Code review
● Tareas de deuda técnica
● Refactor cuando sea necesario
● Pods homólogos en Swift
10
El comienzo
11
● Creamos nuestro primer fichero en Swift!
● idealista-Bridging-Header.h
o Clases de Objc que necesitan visibilidad
desde Swift
● idealista-Swift.h (compilación)
o XCode completa idealista-Swift con clases
de Swift que necesitan visibilidad desde
Objc
El comienzo
12
Primeros problemas
13
● Comunicación Objc - Swift (IUO!)
● Crashes en tiempo de ejecución
● Dependencias Objc - Swift (Bridging header)
● El target de test incluye todos los ficheros
● If - let anidados
● Sin cláusula where
● XCode...
Primeros problemas (Swift 1)
14
Primeros problemas
15
Siguientes pasos:
Xcode 6.3
16
● Nulabilidad desde Objc
● 40% del proyecto en Swift
● VIPER
● Estructuras para el modelo
● Enumerados para el View - Model
● Aumento del “code coverage”
● Aumento “crash free users”
● Aumento de tiempos de compilación
Siguientes pasos (XCode 6.3)
17
Siguientes pasos (XCode 6.3)
18
Xcode 7 - Swift 2
19
● El drama, iOS 7
o Crash en genéricos
o Imposibilidad de usar Pods en Swift
o Dejamos de dar soporte a iOS 7
● Mejoras
o Testable import
o Guard
o If - let múltiples anidados
o Cláusula where
XCode 7 - Swift 2
20
Xcode 8 - Swift 3
21
● Proyecto 99,9% en Swift
● Migración automática mis co**nes
● Cambios en las firmas de los métodos
● Enumerados en minúsculas
● Comparar opcionales (Crash en runtime)
● Nuevos warnings
● Nuevos y divertidos troleos...
Swift 3 (XCode 8 - Swift 3)
22
Swift 3 (XCode 8 - Swift 3)
23
24
Estructuras / Enumerados
25
Estructuras
● Inmutabilidad
o Da seguridad
● Paso por valor vs paso por referencia
o Cada caso es distinto
● Hay que acostumbrarse a usarlo
o A veces genera más problemas que
soluciones
Estructuras / Enumerados
26
Enumerados
● No solo valen para representar valores
disjuntos
o Pueden tener lógica propia
● Valores asociados
● Muchos usos
o View models, remote config, proveedores
de login...
Estructuras / Enumerados
27
28
29
30
Blocks vs Closures
31
● Sintaxis poco intuitiva
Bloques
Blocks vs Closures
32
Bloques
Blocks vs Closures
http://fuckingblocksyntax.com/
33
● Sintaxis poco intuitiva
● Poco extendido su uso
● En tareas asíncronas, se usan más los
delegados que los bloques
Bloques
Blocks vs Closures
34
● Sintaxis mucho más natural, como si
declarases métodos
Closures
Blocks vs Closures
35
Bloques
Blocks vs Closures
http://fuckingclosuresyntax.com/
36
● Sintaxis más natural
● Trailing closure
● Parámetros / Return implícitos
● Mayor uso de closures vs delegates
● Typealias para dar semántica
● Cuidado con los ciclos de memoria
Closures
Blocks vs Closures
37
38
39
40
41
42
43
44
VIPER
45
Definición
VIPER
46
Frameworks dinámicos
47
● Nos sirve para desacoplar la aplicación
o Módulo de servicios, gestión de
localización del usuario, core spotlight...
● Reutilización de código
o Aplicación /Apple Watch / ¿tv OS?
● Menos conflictos durante el desarrollo
● Mejor separación de responsabilidades
Frameworks dinámicos
Frameworks dinámicos
48
Programación
orientada a protocolos
49
Ejemplo
Programación orientada a protocolos
50
Ejemplo
Programación orientada a protocolos
51
52
53
54
55
56
57
Consejos
58
● Poco a poco, sin prisa
● Nuevas funcionalidades en Swift
o Sus test correspondientes también
● Mejor pasar primero a Swift el código antiguo
y crear deuda técnica que refactorizar el
código mientras se está migrando
● Apoyarse en los test
● Quitar soporte iOS 7
Consejos
59
Consejos (tiempos de compilación)
Derived data en RAM
Pods y workspace al Git
Pods privados
Swift Whole Module
Optimization
Xfrontend -debug-time-
function-bodies
60
Libros y enlaces
61
Para aprender Swift
● https://itunes.apple.com/es/book/swift-programming-language/id881256329?mt=11
● https://itunes.apple.com/es/book/using-swift-cocoa-objective/id888894773?mt=11
● https://itunes.apple.com/es/course/developing-ios-9-apps-swift/id1104579961?l=en
Swift avanzado
● https://www.objc.io/books/advanced-swift/
Programación funcional con Swift
● https://www.objc.io/books/functional-swift/
● https://www.raywenderlich.com/114456/introduction-functional-programming-swift
● https://realm.io/news/altconf-chris-eidhof-functional-programming-in-swift/
Protocol oriented programming
● https://developer.apple.com/videos/play/wwdc2015/408/
● https://developer.apple.com/videos/play/wwdc2016/419/
● https://realm.io/news/appbuilders-natasha-muraschev-practical-protocol-oriented-
programming/
● https://realm.io/news/doios-natasha-murashev-protocol-oriented-mvvm/
● http://krakendev.io/blog/subclassing-can-suck-and-heres-why
● https://speakerdeck.com/jessesquires/pushing-the-limits-of-protocol-oriented-programming
● https://www.raywenderlich.com/109156/introducing-protocol-oriented-programming-in-swift-2
● https://www.natashatherobot.com/protocol-oriented-views-in-swift/
● https://www.natashatherobot.com/protocol-oriented-networking-in-swift/
Libros y enlaces
62
Nuevas funcionalidades en Swift 3
● https://github.com/apple/swift-evolution/blob/master/releases/swift-3_0.md
Bugs
● http://stackoverflow.com/questions/28476030/xcode-keeps-building-storyboard-after-each-
keystroke
● https://forums.developer.apple.com/thread/43445
● https://forums.developer.apple.com/thread/62737
VIPER
● https://www.objc.io/issues/13-architecture/viper/
● https://github.com/mutualmobile/VIPER-SWIFT
Value Types
● https://realm.io/news/andy-matuschak-controlling-complexity/
● https://www.objc.io/issues/16-swift/swift-classes-vs-structs/
● https://www.raywenderlich.com/112027/reference-value-types-in-swift-part-1
● https://developer.apple.com/swift/blog/?id=10
63
Gracias!!
Miguel Olmedo Camacho
@molmedoc
Enrique Fau de Casa-Juana
@kikefau
64
¿Preguntas?
Miguel Olmedo Camacho
@molmedoc
Enrique Fau de Casa-Juana
@kikefau

Más contenido relacionado

La actualidad más candente

La actualidad más candente (11)

Estructuras de datos para realidad virtual
Estructuras de datos para realidad virtualEstructuras de datos para realidad virtual
Estructuras de datos para realidad virtual
 
Agile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvilAgile university day - Un día en un equipo ágil de desarrollo móvil
Agile university day - Un día en un equipo ágil de desarrollo móvil
 
Afilando la Katana: Qué debe saber un ninja programador (en 2013)
Afilando la Katana: Qué debe saber un ninja programador (en 2013)Afilando la Katana: Qué debe saber un ninja programador (en 2013)
Afilando la Katana: Qué debe saber un ninja programador (en 2013)
 
Taller de laravel
Taller de laravelTaller de laravel
Taller de laravel
 
Swift sin hype y su importancia en el 2017
 Swift sin hype y su importancia en el 2017  Swift sin hype y su importancia en el 2017
Swift sin hype y su importancia en el 2017
 
Grails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - SistemasGrails 2013 - PUCMM - Santiago - Sistemas
Grails 2013 - PUCMM - Santiago - Sistemas
 
Jornadas Odoo 2015 - Buenas prácticas en el desarrollo de Odoo
Jornadas Odoo 2015 - Buenas prácticas en el desarrollo de OdooJornadas Odoo 2015 - Buenas prácticas en el desarrollo de Odoo
Jornadas Odoo 2015 - Buenas prácticas en el desarrollo de Odoo
 
Angular 2 for dart mentiras y verdades (Google I/O extended Madrid)
Angular 2 for dart  mentiras y verdades (Google I/O extended Madrid)Angular 2 for dart  mentiras y verdades (Google I/O extended Madrid)
Angular 2 for dart mentiras y verdades (Google I/O extended Madrid)
 
Task Parallel Library 2014
Task Parallel Library 2014Task Parallel Library 2014
Task Parallel Library 2014
 
Desarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo QuilónDesarrollo web en Nodejs con Pillars por Chelo Quilón
Desarrollo web en Nodejs con Pillars por Chelo Quilón
 
5 claves para un trayecto exitoso a DevOps
5 claves para un trayecto exitoso a DevOps5 claves para un trayecto exitoso a DevOps
5 claves para un trayecto exitoso a DevOps
 

Destacado

Business plan1-150822152244-lva1-app6892
Business plan1-150822152244-lva1-app6892Business plan1-150822152244-lva1-app6892
Business plan1-150822152244-lva1-app6892
Vikas Lal
 
Resume_Shipra Srivastava (2)
Resume_Shipra Srivastava (2)Resume_Shipra Srivastava (2)
Resume_Shipra Srivastava (2)
Shipra Srivastava
 
Trudeaumania 2 and Trump Dynasty for Posting online
Trudeaumania 2 and Trump Dynasty for Posting onlineTrudeaumania 2 and Trump Dynasty for Posting online
Trudeaumania 2 and Trump Dynasty for Posting online
Michael Bondy
 
Xiamen marco polo zheng he
Xiamen marco polo   zheng heXiamen marco polo   zheng he
Xiamen marco polo zheng he
Efe Kurnaz
 

Destacado (20)

Business plan1-150822152244-lva1-app6892
Business plan1-150822152244-lva1-app6892Business plan1-150822152244-lva1-app6892
Business plan1-150822152244-lva1-app6892
 
Migrando CI a Docker
Migrando CI a DockerMigrando CI a Docker
Migrando CI a Docker
 
Resume_Shipra Srivastava (2)
Resume_Shipra Srivastava (2)Resume_Shipra Srivastava (2)
Resume_Shipra Srivastava (2)
 
Trudeaumania 2 and Trump Dynasty for Posting online
Trudeaumania 2 and Trump Dynasty for Posting onlineTrudeaumania 2 and Trump Dynasty for Posting online
Trudeaumania 2 and Trump Dynasty for Posting online
 
Teletrabajo en el mundo real
Teletrabajo en el mundo realTeletrabajo en el mundo real
Teletrabajo en el mundo real
 
huirty
huirtyhuirty
huirty
 
Supporting SME Growth Through Innovation
Supporting SME Growth Through InnovationSupporting SME Growth Through Innovation
Supporting SME Growth Through Innovation
 
33º domingo tob 2015
33º domingo tob  201533º domingo tob  2015
33º domingo tob 2015
 
The food pyramid leo kenia
The food pyramid   leo keniaThe food pyramid   leo kenia
The food pyramid leo kenia
 
kleenes theorem and NFA ppt
kleenes theorem and NFA pptkleenes theorem and NFA ppt
kleenes theorem and NFA ppt
 
Food pyramid
Food pyramid Food pyramid
Food pyramid
 
2016.DIF_Toolkit
2016.DIF_Toolkit2016.DIF_Toolkit
2016.DIF_Toolkit
 
Виртуальная психолого-педагогическая лаборатория
Виртуальная психолого-педагогическая лабораторияВиртуальная психолого-педагогическая лаборатория
Виртуальная психолого-педагогическая лаборатория
 
Gerencia industrial (1)
Gerencia industrial (1)Gerencia industrial (1)
Gerencia industrial (1)
 
Large Scale Production DITA landscape @SAP
Large Scale Production DITA landscape @SAPLarge Scale Production DITA landscape @SAP
Large Scale Production DITA landscape @SAP
 
APECS
APECSAPECS
APECS
 
Xiamen marco polo zheng he
Xiamen marco polo   zheng heXiamen marco polo   zheng he
Xiamen marco polo zheng he
 
Practica 3 quimica organica
Practica 3 quimica organicaPractica 3 quimica organica
Practica 3 quimica organica
 
Entrepreneurship and Small Business: Unit No. 4
Entrepreneurship and Small Business: Unit No. 4Entrepreneurship and Small Business: Unit No. 4
Entrepreneurship and Small Business: Unit No. 4
 
La elipse
La elipseLa elipse
La elipse
 

Similar a Swift migration. the true history

.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup
 
Herramientas Ágiles para Desarrollo
Herramientas Ágiles para DesarrolloHerramientas Ágiles para Desarrollo
Herramientas Ágiles para Desarrollo
Gastón Guillerón
 
Lenguaje java
Lenguaje javaLenguaje java
Lenguaje java
Eli Diaz
 

Similar a Swift migration. the true history (20)

VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...VLCTechFest -  Simplificando Controladores: Una introducción a Action-Domain ...
VLCTechFest - Simplificando Controladores: Una introducción a Action-Domain ...
 
Grails y EC2 - De cero a multinacional
Grails y EC2 - De cero a multinacionalGrails y EC2 - De cero a multinacional
Grails y EC2 - De cero a multinacional
 
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
.NET UY Meetup 4 - AOP & PostSharp by Bruno Bologna & Fabian Fernandez
 
Herramientas Ágiles para Desarrollo
Herramientas Ágiles para DesarrolloHerramientas Ágiles para Desarrollo
Herramientas Ágiles para Desarrollo
 
Herramientas agilesdesarrollo
Herramientas agilesdesarrolloHerramientas agilesdesarrollo
Herramientas agilesdesarrollo
 
Grails barcamp 2013
Grails barcamp 2013Grails barcamp 2013
Grails barcamp 2013
 
Los reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológicoLos reinos de finizens - Nuestro stark tecnológico
Los reinos de finizens - Nuestro stark tecnológico
 
Portafolio de evidencias
Portafolio de evidenciasPortafolio de evidencias
Portafolio de evidencias
 
Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2Escalabilidad y alto rendimiento con Symfony2
Escalabilidad y alto rendimiento con Symfony2
 
Portafolio de evidencias
Portafolio de evidenciasPortafolio de evidencias
Portafolio de evidencias
 
Gestión Remota de Equipos con Python
Gestión Remota de Equipos con PythonGestión Remota de Equipos con Python
Gestión Remota de Equipos con Python
 
Seminario Spring Roo. Monitorización con Spring Insight
Seminario Spring Roo. Monitorización con Spring InsightSeminario Spring Roo. Monitorización con Spring Insight
Seminario Spring Roo. Monitorización con Spring Insight
 
Probando aplicaciones basadas en LLMs.pdf
Probando aplicaciones basadas en LLMs.pdfProbando aplicaciones basadas en LLMs.pdf
Probando aplicaciones basadas en LLMs.pdf
 
Desarrollo modermo de aplicaciones web
Desarrollo modermo de aplicaciones webDesarrollo modermo de aplicaciones web
Desarrollo modermo de aplicaciones web
 
.NET Memoria y Rendimiento
.NET Memoria y Rendimiento.NET Memoria y Rendimiento
.NET Memoria y Rendimiento
 
Conceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEOConceptos básicos y aplicaciones prácticas de programación para SEO
Conceptos básicos y aplicaciones prácticas de programación para SEO
 
Vaadin y Grails Barcamp 2013
Vaadin y Grails Barcamp 2013Vaadin y Grails Barcamp 2013
Vaadin y Grails Barcamp 2013
 
De cero a multinacional con Grails y EC2
De cero a multinacional con Grails y EC2De cero a multinacional con Grails y EC2
De cero a multinacional con Grails y EC2
 
Principios de diseño
Principios de diseñoPrincipios de diseño
Principios de diseño
 
Lenguaje java
Lenguaje javaLenguaje java
Lenguaje java
 

Último

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Último (12)

Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 

Swift migration. the true history

  • 1. 0 Swift’s migration. The true Story Miguel Olmedo Camacho @molmedoc Enrique Fau de Casa-Juana @kikefau
  • 2. 1
  • 5. 4 ¿Por qué? ● Nuevo lenguaje ● Sintaxis moderna ● Más rápido ● Fuertemente tipado ● Genéricos ● Enfoque funcional ● Closures VS Blocks ● Refactor (Legacy code) Motivaciones
  • 7. 6 ● Aplicación nativa (universal) ● iOS >= 6 ● ≃ 1.000 ficheros ● ≃ 140.000 líneas de código ● 12 bibliotecas de terceros (pods) ● Poco modularizada ● Deuda técnica Punto de partida
  • 10. 9 Estrategia de migración ● Migración incremental ● No congelamos nuevos desarrollos ● Nuevos desarrollos en Swift ● Pair programming - Code review ● Tareas de deuda técnica ● Refactor cuando sea necesario ● Pods homólogos en Swift
  • 12. 11 ● Creamos nuestro primer fichero en Swift! ● idealista-Bridging-Header.h o Clases de Objc que necesitan visibilidad desde Swift ● idealista-Swift.h (compilación) o XCode completa idealista-Swift con clases de Swift que necesitan visibilidad desde Objc El comienzo
  • 14. 13 ● Comunicación Objc - Swift (IUO!) ● Crashes en tiempo de ejecución ● Dependencias Objc - Swift (Bridging header) ● El target de test incluye todos los ficheros ● If - let anidados ● Sin cláusula where ● XCode... Primeros problemas (Swift 1)
  • 17. 16 ● Nulabilidad desde Objc ● 40% del proyecto en Swift ● VIPER ● Estructuras para el modelo ● Enumerados para el View - Model ● Aumento del “code coverage” ● Aumento “crash free users” ● Aumento de tiempos de compilación Siguientes pasos (XCode 6.3)
  • 19. 18 Xcode 7 - Swift 2
  • 20. 19 ● El drama, iOS 7 o Crash en genéricos o Imposibilidad de usar Pods en Swift o Dejamos de dar soporte a iOS 7 ● Mejoras o Testable import o Guard o If - let múltiples anidados o Cláusula where XCode 7 - Swift 2
  • 21. 20 Xcode 8 - Swift 3
  • 22. 21 ● Proyecto 99,9% en Swift ● Migración automática mis co**nes ● Cambios en las firmas de los métodos ● Enumerados en minúsculas ● Comparar opcionales (Crash en runtime) ● Nuevos warnings ● Nuevos y divertidos troleos... Swift 3 (XCode 8 - Swift 3)
  • 23. 22 Swift 3 (XCode 8 - Swift 3)
  • 24. 23
  • 26. 25 Estructuras ● Inmutabilidad o Da seguridad ● Paso por valor vs paso por referencia o Cada caso es distinto ● Hay que acostumbrarse a usarlo o A veces genera más problemas que soluciones Estructuras / Enumerados
  • 27. 26 Enumerados ● No solo valen para representar valores disjuntos o Pueden tener lógica propia ● Valores asociados ● Muchos usos o View models, remote config, proveedores de login... Estructuras / Enumerados
  • 28. 27
  • 29. 28
  • 30. 29
  • 32. 31 ● Sintaxis poco intuitiva Bloques Blocks vs Closures
  • 34. 33 ● Sintaxis poco intuitiva ● Poco extendido su uso ● En tareas asíncronas, se usan más los delegados que los bloques Bloques Blocks vs Closures
  • 35. 34 ● Sintaxis mucho más natural, como si declarases métodos Closures Blocks vs Closures
  • 37. 36 ● Sintaxis más natural ● Trailing closure ● Parámetros / Return implícitos ● Mayor uso de closures vs delegates ● Typealias para dar semántica ● Cuidado con los ciclos de memoria Closures Blocks vs Closures
  • 38. 37
  • 39. 38
  • 40. 39
  • 41. 40
  • 42. 41
  • 43. 42
  • 44. 43
  • 48. 47 ● Nos sirve para desacoplar la aplicación o Módulo de servicios, gestión de localización del usuario, core spotlight... ● Reutilización de código o Aplicación /Apple Watch / ¿tv OS? ● Menos conflictos durante el desarrollo ● Mejor separación de responsabilidades Frameworks dinámicos Frameworks dinámicos
  • 52. 51
  • 53. 52
  • 54. 53
  • 55. 54
  • 56. 55
  • 57. 56
  • 59. 58 ● Poco a poco, sin prisa ● Nuevas funcionalidades en Swift o Sus test correspondientes también ● Mejor pasar primero a Swift el código antiguo y crear deuda técnica que refactorizar el código mientras se está migrando ● Apoyarse en los test ● Quitar soporte iOS 7 Consejos
  • 60. 59 Consejos (tiempos de compilación) Derived data en RAM Pods y workspace al Git Pods privados Swift Whole Module Optimization Xfrontend -debug-time- function-bodies
  • 62. 61 Para aprender Swift ● https://itunes.apple.com/es/book/swift-programming-language/id881256329?mt=11 ● https://itunes.apple.com/es/book/using-swift-cocoa-objective/id888894773?mt=11 ● https://itunes.apple.com/es/course/developing-ios-9-apps-swift/id1104579961?l=en Swift avanzado ● https://www.objc.io/books/advanced-swift/ Programación funcional con Swift ● https://www.objc.io/books/functional-swift/ ● https://www.raywenderlich.com/114456/introduction-functional-programming-swift ● https://realm.io/news/altconf-chris-eidhof-functional-programming-in-swift/ Protocol oriented programming ● https://developer.apple.com/videos/play/wwdc2015/408/ ● https://developer.apple.com/videos/play/wwdc2016/419/ ● https://realm.io/news/appbuilders-natasha-muraschev-practical-protocol-oriented- programming/ ● https://realm.io/news/doios-natasha-murashev-protocol-oriented-mvvm/ ● http://krakendev.io/blog/subclassing-can-suck-and-heres-why ● https://speakerdeck.com/jessesquires/pushing-the-limits-of-protocol-oriented-programming ● https://www.raywenderlich.com/109156/introducing-protocol-oriented-programming-in-swift-2 ● https://www.natashatherobot.com/protocol-oriented-views-in-swift/ ● https://www.natashatherobot.com/protocol-oriented-networking-in-swift/ Libros y enlaces
  • 63. 62 Nuevas funcionalidades en Swift 3 ● https://github.com/apple/swift-evolution/blob/master/releases/swift-3_0.md Bugs ● http://stackoverflow.com/questions/28476030/xcode-keeps-building-storyboard-after-each- keystroke ● https://forums.developer.apple.com/thread/43445 ● https://forums.developer.apple.com/thread/62737 VIPER ● https://www.objc.io/issues/13-architecture/viper/ ● https://github.com/mutualmobile/VIPER-SWIFT Value Types ● https://realm.io/news/andy-matuschak-controlling-complexity/ ● https://www.objc.io/issues/16-swift/swift-classes-vs-structs/ ● https://www.raywenderlich.com/112027/reference-value-types-in-swift-part-1 ● https://developer.apple.com/swift/blog/?id=10