SlideShare a Scribd company logo
1 of 27
Download to read offline
Swift + Obj-C 
Erick Camacho <@ecamacho>
Erick Camacho 
» Programo desde hace ~ 10 años 
» Programo para iOS desde hace 4 
» Actualmente: 
nubleer.com
Swift 
» Interoperable con Obj-C 
» Permite dos estrategias: 
1.Ir traduciendo tu 
proyecto Obj-c poco a 
poco a Swift 
2.Combinar código/ 
librerías legadas de 
Obj-C y lo nuevo hacerlo 
en Swift
Interoperabilidad a nivel del lenguaje
Inicializadores 
//Obj-C 
UIViewController *viewController = [[UIViewController alloc] 
initWithNibName:@"Nib" bundle:nil]; 
//swift 
let viewController = UIViewController(nibName: "nibName", bundle: nil)
Properties 
//Obj-C 
@interface LegacyModel : NSObject 
@property (nonatomic, strong) NSString *name; 
@end 
LegacyModel model = [[LegacyModel alloc] init]; 
model.name = @"nombre"; 
[model setName:@"nombre"]; 
//swift 
var model = LegacyModel() 
model.name = "nombre"
String se convierte a NSString 
NSString tiene la propiedad capitalizedString, en 
Swift lo podemos usar en 'String's 
let s:String = "abc" 
println("En mayúsculas (s.capitalizedString)")
NSString tiene que ser 'casteado' a String 
String tiene el método toInt(), en Swift solo lo 
podemos usar en 'NSString's si hacemos un cast 
explícito 
let ns : NSString = "3" 
let entero : Int = (ns as String).toInt()! 
println("valor (entero)")
Los tipos numéricos se convierten a 
NSNumber 
Sólo para Int, UInt, Float, Double y Bool 
let numero : Int = 34 
let nsnumber : NSNumber = numero 
NSInteger y NSUInteger se convierten en Int 
let nsinteger : NSInteger = 23 
let numero : Int = nsinteger
Colecciones 
Los NSArray hacen bridge a un Array: 
NSArray -> AnyObject[]
NSLog Vive! 
y casi todas las funciones "C" usadas en Obj-C como 
CGRectMake(). ¿Cuáles faltan? NSAssert no existe, 
usen assert 
NSLog(!"Mi numero %@", numero) 
Aunque es preferible usar println 
pritnln("Mi numero (numero)")
Pointers? 
Para algunos casos, se definieron tipos Swift para 
apuntadores. 
Ejemplo: 
¿Cómo paso un *NSError? 
NSError *error; 
[myNSData writeToFile:path options:mask error:&error] 
if(error) { 
//do something 
}
¿Cómo mezclo todo en una app híbrida?
Usar clases Obj-C en Swift 
Agrega un Archivo Swift a tu proyecto Obj-C o 
viceversa
Bridge Header 
Encabezado donde deben ir los imports de todas las 
clases de Obj-C que quieran usar desde Swift.
Usar clases Swift en Obj-C 
Un poco más complejo: 
1.Asegúrate de tener asignado un "Product Name" a 
nivel de tu Proyecto
Usar clases Swift en Obj-C 
1.La bandera de "Define Modules" debe estar 
seleccionada
Usar clases Swift en Obj-C 
1.Las clases que quieras usar deben de heredar de 
NSObject o ser marcadas con @objc 
import UIKit 
class SwiftModel : NSObject { 
let name : String 
init(name : String) { 
self.name = name 
} 
}
Usar clases Swift en Obj-C 
1.Si todo sale bien, Xcode generará un .H oculto con 
el nombre *<ProductName>-Swift.h que debes de 
importar en tu clase Obj-C para usar tus clases 
Swift 
#import "LegacyModel.h" 
#import "SwiftInteroperability-Swift.h" 
@implementation LegacyModel 
- (void)doSomething 
{ 
SwiftModel *swiftModel = [[SwiftModel alloc] initWithName:@"Juan"]; 
NSLog(@"SwiftModel %@", [swiftModel name]); 
} 
@end
Usar clases Swift en Obj-C 
Dado que en Obj-C puedes pasar valores nulos a los 
objetos, recuerda poner tus variables en Swift como 
Optionals
¿Y CocoaPods?
Crea tu PodFile 
pod 'AFNetworking' 
recuerda 
pod install
No olvides importar las 
cabeceras que necesites en tu 
Bridge Header 
#import "LegacyModel.h" 
#import <AFNetworking/AFNetworking.h>
Ya puedes usar la librería en 
Swift 
let manager = AFHTTPRequestOperationManager() 
manager.GET( 
"http://api.zippopotam.us/mx/06170", 
parameters: nil, 
success: { (operation: AFHTTPRequestOperation!, 
responseObject: AnyObject!) in 
println("JSON: " + responseObject.description) 
}, 
failure: { (operation: AFHTTPRequestOperation!, 
error: NSError!) in 
println("Error: " + error.localizedDescription) 
})
Limitaciones de CocoaPods 
No es posible todavía usarlo para importar librerías 
hechas en Swift en tus proyectos. 
CocoaPods va a migrar a usar Dynamic Frameworks y 
CLang modules para iOS8>.

More Related Content

Viewers also liked

Dom pascua 1_b_pagola
Dom pascua 1_b_pagolaDom pascua 1_b_pagola
Dom pascua 1_b_pagola
padruga
 
Configuración tarjetas de red inalambricas
Configuración tarjetas de red inalambricasConfiguración tarjetas de red inalambricas
Configuración tarjetas de red inalambricas
ieltxu orue
 
Cuando naciste en china 1 parte
Cuando naciste en china 1 parteCuando naciste en china 1 parte
Cuando naciste en china 1 parte
kande
 
Administración & Gerencia de la Micro, Pequeña y Mediana Empresa
Administración & Gerencia de la Micro, Pequeña y Mediana EmpresaAdministración & Gerencia de la Micro, Pequeña y Mediana Empresa
Administración & Gerencia de la Micro, Pequeña y Mediana Empresa
Alberto Gómez Torres
 
Gestion del conocimiento
Gestion del conocimientoGestion del conocimiento
Gestion del conocimiento
Leonardo Romero
 

Viewers also liked (20)

6 tendencias móviles para 2015
6 tendencias móviles para 2015 6 tendencias móviles para 2015
6 tendencias móviles para 2015
 
violencia familiar
violencia familiarviolencia familiar
violencia familiar
 
Second Life
Second LifeSecond Life
Second Life
 
Dom pascua 1_b_pagola
Dom pascua 1_b_pagolaDom pascua 1_b_pagola
Dom pascua 1_b_pagola
 
Configuración tarjetas de red inalambricas
Configuración tarjetas de red inalambricasConfiguración tarjetas de red inalambricas
Configuración tarjetas de red inalambricas
 
Escuela para padres
Escuela para padresEscuela para padres
Escuela para padres
 
Cuando naciste en china 1 parte
Cuando naciste en china 1 parteCuando naciste en china 1 parte
Cuando naciste en china 1 parte
 
Administración & Gerencia de la Micro, Pequeña y Mediana Empresa
Administración & Gerencia de la Micro, Pequeña y Mediana EmpresaAdministración & Gerencia de la Micro, Pequeña y Mediana Empresa
Administración & Gerencia de la Micro, Pequeña y Mediana Empresa
 
Principios de economía
Principios de economíaPrincipios de economía
Principios de economía
 
Boletin Influenza(Impresion)[1]
Boletin Influenza(Impresion)[1]Boletin Influenza(Impresion)[1]
Boletin Influenza(Impresion)[1]
 
Trivial tema 1
Trivial tema 1Trivial tema 1
Trivial tema 1
 
La Magia
La MagiaLa Magia
La Magia
 
Pepe Ppr
Pepe PprPepe Ppr
Pepe Ppr
 
Uniacc- Exposición de Mariela Vilos
Uniacc- Exposición de Mariela VilosUniacc- Exposición de Mariela Vilos
Uniacc- Exposición de Mariela Vilos
 
Cielos De Francia
Cielos De FranciaCielos De Francia
Cielos De Francia
 
Gestion del conocimiento
Gestion del conocimientoGestion del conocimiento
Gestion del conocimiento
 
REDES
REDESREDES
REDES
 
Teoria de sistemas en la organización
Teoria de sistemas en la organizaciónTeoria de sistemas en la organización
Teoria de sistemas en la organización
 
Radiaciones solares
Radiaciones solaresRadiaciones solares
Radiaciones solares
 
El futur de les TIC a la vila de Masquefa 2010-12-09
El futur de les TIC a la vila de Masquefa 2010-12-09El futur de les TIC a la vila de Masquefa 2010-12-09
El futur de les TIC a la vila de Masquefa 2010-12-09
 

Similar to Integrando Swift y Objective-C

Primera_D-Semanaz<xcz<c<zc-Fundamentos_C++.ppt
Primera_D-Semanaz<xcz<c<zc-Fundamentos_C++.pptPrimera_D-Semanaz<xcz<c<zc-Fundamentos_C++.ppt
Primera_D-Semanaz<xcz<c<zc-Fundamentos_C++.ppt
SANTOS400018
 
Desarrollar juegos para Iphone e Ipad con Cocos2D
Desarrollar juegos para Iphone e Ipad con Cocos2DDesarrollar juegos para Iphone e Ipad con Cocos2D
Desarrollar juegos para Iphone e Ipad con Cocos2D
creagamers
 

Similar to Integrando Swift y Objective-C (20)

Vue + Typescript: Decorators vs. Extend, Fight!
Vue + Typescript: Decorators vs. Extend, Fight!Vue + Typescript: Decorators vs. Extend, Fight!
Vue + Typescript: Decorators vs. Extend, Fight!
 
Curso iOS
Curso iOSCurso iOS
Curso iOS
 
Aprendiendo a usar NDK Android Day(castellano)
Aprendiendo a usar NDK Android Day(castellano)Aprendiendo a usar NDK Android Day(castellano)
Aprendiendo a usar NDK Android Day(castellano)
 
Curso Swift
Curso SwiftCurso Swift
Curso Swift
 
Introducción a Qt
Introducción a QtIntroducción a Qt
Introducción a Qt
 
apuntes-openscad-1.pdf
apuntes-openscad-1.pdfapuntes-openscad-1.pdf
apuntes-openscad-1.pdf
 
Primera_D-Semanaz<xcz<c<zc-Fundamentos_C++.ppt
Primera_D-Semanaz<xcz<c<zc-Fundamentos_C++.pptPrimera_D-Semanaz<xcz<c<zc-Fundamentos_C++.ppt
Primera_D-Semanaz<xcz<c<zc-Fundamentos_C++.ppt
 
Introducción a ObjectiveC e IOS
Introducción a ObjectiveC e IOSIntroducción a ObjectiveC e IOS
Introducción a ObjectiveC e IOS
 
Desarrollar juegos para Iphone e Ipad con Cocos2D
Desarrollar juegos para Iphone e Ipad con Cocos2DDesarrollar juegos para Iphone e Ipad con Cocos2D
Desarrollar juegos para Iphone e Ipad con Cocos2D
 
Visual basic .NET
Visual basic .NETVisual basic .NET
Visual basic .NET
 
Numeros de armstrong en c programacion estructurada
Numeros de armstrong en c programacion estructuradaNumeros de armstrong en c programacion estructurada
Numeros de armstrong en c programacion estructurada
 
Uso de Librerías Objective-c en Xamarin.iOS
Uso de Librerías Objective-c en Xamarin.iOSUso de Librerías Objective-c en Xamarin.iOS
Uso de Librerías Objective-c en Xamarin.iOS
 
Introducción a Angular
Introducción a AngularIntroducción a Angular
Introducción a Angular
 
Semana 2 Configuración entorno de desarrollo
Semana 2   Configuración entorno de desarrolloSemana 2   Configuración entorno de desarrollo
Semana 2 Configuración entorno de desarrollo
 
Asp.Net vNext - La revolución que viene
Asp.Net vNext - La revolución que vieneAsp.Net vNext - La revolución que viene
Asp.Net vNext - La revolución que viene
 
Calculadora Gráfica Java implementando el Patrón MVC
Calculadora Gráfica Java implementando el Patrón MVCCalculadora Gráfica Java implementando el Patrón MVC
Calculadora Gráfica Java implementando el Patrón MVC
 
C sharp intro1
C sharp intro1C sharp intro1
C sharp intro1
 
C sharp intro1
C sharp intro1C sharp intro1
C sharp intro1
 
Taller de Pascal 01.pptx
Taller de Pascal 01.pptxTaller de Pascal 01.pptx
Taller de Pascal 01.pptx
 
Tema servlets
Tema servletsTema servlets
Tema servlets
 

More from Erick Camacho

Porque debes de renunciar a tu empleo y desarrollar para iOS
Porque debes de renunciar a tu empleo y desarrollar para iOSPorque debes de renunciar a tu empleo y desarrollar para iOS
Porque debes de renunciar a tu empleo y desarrollar para iOS
Erick Camacho
 

More from Erick Camacho (11)

Modelos de Concurrencia
Modelos de ConcurrenciaModelos de Concurrencia
Modelos de Concurrencia
 
Realm para iOS
Realm para iOSRealm para iOS
Realm para iOS
 
Desarrollo de apps para AppleWatch con Watchkit
Desarrollo de apps para AppleWatch con WatchkitDesarrollo de apps para AppleWatch con Watchkit
Desarrollo de apps para AppleWatch con Watchkit
 
Porque debes de renunciar a tu empleo y desarrollar para iOS
Porque debes de renunciar a tu empleo y desarrollar para iOSPorque debes de renunciar a tu empleo y desarrollar para iOS
Porque debes de renunciar a tu empleo y desarrollar para iOS
 
CocoaHeads México: Introducción a CocoaTouch:UIKit
CocoaHeads México: Introducción a CocoaTouch:UIKitCocoaHeads México: Introducción a CocoaTouch:UIKit
CocoaHeads México: Introducción a CocoaTouch:UIKit
 
Lo que no te han contado sobre el desarrollo para iPhone/iPad
Lo que no te han contado sobre el desarrollo para iPhone/iPadLo que no te han contado sobre el desarrollo para iPhone/iPad
Lo que no te han contado sobre el desarrollo para iPhone/iPad
 
Ecosistemas software para Flex
Ecosistemas software para FlexEcosistemas software para Flex
Ecosistemas software para Flex
 
Mejorando el País mediante Código
Mejorando el País mediante CódigoMejorando el País mediante Código
Mejorando el País mediante Código
 
Introducción a NoSQL con MongoDB
Introducción a NoSQL con MongoDBIntroducción a NoSQL con MongoDB
Introducción a NoSQL con MongoDB
 
Spring BlazeDS Integration + Flex 4
Spring BlazeDS Integration + Flex 4Spring BlazeDS Integration + Flex 4
Spring BlazeDS Integration + Flex 4
 
Hands on Spring 2.5
Hands on Spring 2.5Hands on Spring 2.5
Hands on Spring 2.5
 

Recently uploaded

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

Recently uploaded (10)

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
 
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.
 
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
 
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
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
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
 
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...
 

Integrando Swift y Objective-C

  • 1. Swift + Obj-C Erick Camacho <@ecamacho>
  • 2. Erick Camacho » Programo desde hace ~ 10 años » Programo para iOS desde hace 4 » Actualmente: nubleer.com
  • 3. Swift » Interoperable con Obj-C » Permite dos estrategias: 1.Ir traduciendo tu proyecto Obj-c poco a poco a Swift 2.Combinar código/ librerías legadas de Obj-C y lo nuevo hacerlo en Swift
  • 4.
  • 6. Inicializadores //Obj-C UIViewController *viewController = [[UIViewController alloc] initWithNibName:@"Nib" bundle:nil]; //swift let viewController = UIViewController(nibName: "nibName", bundle: nil)
  • 7. Properties //Obj-C @interface LegacyModel : NSObject @property (nonatomic, strong) NSString *name; @end LegacyModel model = [[LegacyModel alloc] init]; model.name = @"nombre"; [model setName:@"nombre"]; //swift var model = LegacyModel() model.name = "nombre"
  • 8. String se convierte a NSString NSString tiene la propiedad capitalizedString, en Swift lo podemos usar en 'String's let s:String = "abc" println("En mayúsculas (s.capitalizedString)")
  • 9. NSString tiene que ser 'casteado' a String String tiene el método toInt(), en Swift solo lo podemos usar en 'NSString's si hacemos un cast explícito let ns : NSString = "3" let entero : Int = (ns as String).toInt()! println("valor (entero)")
  • 10. Los tipos numéricos se convierten a NSNumber Sólo para Int, UInt, Float, Double y Bool let numero : Int = 34 let nsnumber : NSNumber = numero NSInteger y NSUInteger se convierten en Int let nsinteger : NSInteger = 23 let numero : Int = nsinteger
  • 11. Colecciones Los NSArray hacen bridge a un Array: NSArray -> AnyObject[]
  • 12. NSLog Vive! y casi todas las funciones "C" usadas en Obj-C como CGRectMake(). ¿Cuáles faltan? NSAssert no existe, usen assert NSLog(!"Mi numero %@", numero) Aunque es preferible usar println pritnln("Mi numero (numero)")
  • 13.
  • 14. Pointers? Para algunos casos, se definieron tipos Swift para apuntadores. Ejemplo: ¿Cómo paso un *NSError? NSError *error; [myNSData writeToFile:path options:mask error:&error] if(error) { //do something }
  • 15. ¿Cómo mezclo todo en una app híbrida?
  • 16. Usar clases Obj-C en Swift Agrega un Archivo Swift a tu proyecto Obj-C o viceversa
  • 17. Bridge Header Encabezado donde deben ir los imports de todas las clases de Obj-C que quieran usar desde Swift.
  • 18. Usar clases Swift en Obj-C Un poco más complejo: 1.Asegúrate de tener asignado un "Product Name" a nivel de tu Proyecto
  • 19. Usar clases Swift en Obj-C 1.La bandera de "Define Modules" debe estar seleccionada
  • 20. Usar clases Swift en Obj-C 1.Las clases que quieras usar deben de heredar de NSObject o ser marcadas con @objc import UIKit class SwiftModel : NSObject { let name : String init(name : String) { self.name = name } }
  • 21. Usar clases Swift en Obj-C 1.Si todo sale bien, Xcode generará un .H oculto con el nombre *<ProductName>-Swift.h que debes de importar en tu clase Obj-C para usar tus clases Swift #import "LegacyModel.h" #import "SwiftInteroperability-Swift.h" @implementation LegacyModel - (void)doSomething { SwiftModel *swiftModel = [[SwiftModel alloc] initWithName:@"Juan"]; NSLog(@"SwiftModel %@", [swiftModel name]); } @end
  • 22. Usar clases Swift en Obj-C Dado que en Obj-C puedes pasar valores nulos a los objetos, recuerda poner tus variables en Swift como Optionals
  • 24. Crea tu PodFile pod 'AFNetworking' recuerda pod install
  • 25. No olvides importar las cabeceras que necesites en tu Bridge Header #import "LegacyModel.h" #import <AFNetworking/AFNetworking.h>
  • 26. Ya puedes usar la librería en Swift let manager = AFHTTPRequestOperationManager() manager.GET( "http://api.zippopotam.us/mx/06170", parameters: nil, success: { (operation: AFHTTPRequestOperation!, responseObject: AnyObject!) in println("JSON: " + responseObject.description) }, failure: { (operation: AFHTTPRequestOperation!, error: NSError!) in println("Error: " + error.localizedDescription) })
  • 27. Limitaciones de CocoaPods No es posible todavía usarlo para importar librerías hechas en Swift en tus proyectos. CocoaPods va a migrar a usar Dynamic Frameworks y CLang modules para iOS8>.