Slide 1

Slide 1 text

Aplicaciones Cocoa Touch usando Swift 2 Juan Felipe Alvarez Saldarriaga @nebiros

Slide 2

Slide 2 text

Swift •Anunciado por Apple en el WWDC de 2014. •Release Stable: 2.0 (Octubre 15 de 2015). •Orientado a protocolos. •Orientado a objetos. •Funcional. •Generics. •Interoperable con Objective C. •Programación segura. •Apple prometió liberarlo a finales de 2015…

Slide 3

Slide 3 text

#import NSString *hola = @“Hola DevFest!”; import UIKit var hola = "Hola DevFest! "

Slide 4

Slide 4 text

Cocoa Touch •Framework de Interfaz de Usuario propiedad de Apple. •Son todos los controles/kits/frameworks/librerías que se usan en iOS. •Está escrito en Objective C.

Slide 5

Slide 5 text

Interoperabilidad •Swift es capaz de entender código escrito en Objective C. •Swift cambia la forma en que llamamos los métodos escritos en Objective C. •No más []. •Los inicializadores de la forma initWithSomething los va a cortar, le va a quitar el initWith y el Something lo va a convertir en el primer parámetro y la primera letra estará en minúscula.

Slide 6

Slide 6 text

UITableView *myTableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; let myTableView: UITableView = UITableView(frame: CGRectZero, style: .Grouped)

Slide 7

Slide 7 text

Interoperabilidad •Todas las propiedades en Swift son nonatomic, Swift va a ignorar cualquier atributo atomic o nonatomic. •Los atributos getter= y setter= de una propiedad van a ser ignorados. •La llamada a un método se realiza con dot syntax, la primera parte del selector se convierte en el nombre del método, el primer argumento de este método no tiene nombre, las otras partes del selector se convierten en argumentos con nombre.

Slide 8

Slide 8 text

[myTableView insertSubview:mySubview atIndex:2]; myTableView.insertSubview(mySubview, atIndex: 2)

Slide 9

Slide 9 text

Interoperabilidad •id se convierte automáticamente en AnyObject. •AnyObject no es seguro. •El tipo de AnyObject no se conoce sino hasta que se corra la aplicación.

Slide 10

Slide 10 text

Valores nulos y opcionales •Swift garantiza que todos los valores NUNCA van a ser nulos. •Programación segura. •Los valores opcionales, Optionals, puede que sean nulos.

Slide 11

Slide 11 text

var nullableProperty: AnyObject? var nonNullProperty: AnyObject

Slide 12

Slide 12 text

Ayudando a ObjC •Generics ligeros. •Agregar atributos para valores nulos o no nulos.

Slide 13

Slide 13 text

@property NSArray *dates; var dates: [NSDate]

Slide 14

Slide 14 text

@property NSSet *words; var words: Set

Slide 15

Slide 15 text

@property NSDictionary *cachedData; var cachedData: [NSURL: NSData]

Slide 16

Slide 16 text

Extensiones •Una extensión es lo mismo que una categoría en Objective C. •Una extensión puede ser aplicada a una clase, una estructura, una enumeración, incluso definida en Objective C.

Slide 17

Slide 17 text

extension CGRect { var area: CGFloat { return width * height } }

Slide 18

Slide 18 text

Bloques •Cualquier bloque en Objective C es automáticamente convertido en un closure.

Slide 19

Slide 19 text

void (^completionBlock)(NSData *, NSError *) = ^(NSData *data, NSError *error) { // ... } let completionBlock: (NSData, NSError) -> Void = { (data, error) in // ... }

Slide 20

Slide 20 text

Clases •Cualquier clase de Objective C automáticamente es accesible en Swift. •A diferencia de los structs, las clases comparten una única copia de los datos, referencia.

Slide 21

Slide 21 text

class MiViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { // … }

Slide 22

Slide 22 text

class MiViewController: UIViewController { @IBOutlet weak var button: UIButton! @IBAction func buttonTapped(AnyObject) { print("button tapped!") } }

Slide 23

Slide 23 text

Demo

Slide 24

Slide 24 text

Gracias!