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
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
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
}
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
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>.