SlideShare une entreprise Scribd logo
1  sur  82
Arturo Jamaica
Introducción a Swift
Contenido
• Lo básico : Variables,
Constantes, Tipado, Strings,
Colecciones
• Operadores, Funciones y
Controladores de Flujo Clases y
propiedades
• Closures, Chaining
• Clases
• Memory management
Initialization
• Swift Playgrounds
• Xcode con Storyboard
• Autolayout y nuevo modelo de
Resizing de apps
• Primera app ios con Swift
• Swift usando cosas de Objective C
• Cocoapods *
• MVCD : Modelo - Vista - Controlador -
Delegate - Datasource *
• Controladores : UITableViewControllers,
UINavigationController,
UITabbarController y UIController *
• Modelos y Parse *
Por que Swift y no empezar
con Objective C
• Es más fácil de entender. Mucho más
• Por que Apple realmente esta comprometido en apoyarlo
• Por que no es obligatorio usarlo ni hay que migrar nada a
lo nuevo
• Es excelente para aprender
• Reduce el tamaño de los proyectos, en un 25%
• Toda el API de Apple lo soporta y es totalmente
retrocompatible.
Por que NO Swift y mejor
empezar con Objective C
• Por que no hay documentación completa aún en
sitios conocidos. Creemosla!
• Por que al googlear solo hay cosas de Taylor y
códigos interbancarios
• Por que al final uno termina aprendiendo
Objective C al mismo tiempo.
Pero…
SwiftObjective C
Menos código = Menos bugs
A considerar
• Swift es una versión final, Xcode ni IOS 8 lo son
• Hay bugs conocidos en los betas. (Yo uso el Beta
2 de XCode)
• Es posible que muchas cosas de Apple esten en
NDA. Revise todo para que lo que esté aquí no lo
esté
• Mi Xcode puede tronar en cualquier momento.
Tengan un poco de paciencia si esto ocurre.
Lo básico
Variables
var languageName: String = "Swift"
Reservada
Nombre
String
Tipo
Variable NO MUTABLE
let languageName: String = "Swift"
AKA Constante
Variables que no cambian después de crearse.
Ahorramos memória
Declaración : Optionals
No existe en C o en Objective-C
Es básicamente y en pocas palabras permitir
variables poder ser nil o no permitirles.
var serverResponseCode: Int? = 404
serverResponseCode = nil
var surveyAnswer: String? // automáticamente nil
Unwarping
let possibleString: String? = “string." // nil o string
println(possibleString!) // para verificar que no sea nil
let assumedString: String! = “implicito" // siempre existe
println(assumedString) // no se necesita
Pueden ser de mas tipos
¿Es enserio? tanto para casi volver a escribir mucho código
Solo bromeaba…
Tipado dinámico!
Lenguaje moderno
Strings
let i_am_a_string = “Soy un String"
let i_am_a_string2 = ‘Soy un String’
for caracter in “mejorando.la" {
println(caracter)
}
m
e
j
o
r
a
n
d
…
🐭
🐭
🐭
🐭
for caracter in “🐭🐭🐭🐭" {
println(caracter)
}
Concatenar y Uso
Interpolación
Mutabilidad
var variableString = "Hola"
variableString += " como estan"
let constantString = "Hola"
constantString += “como estan"
Arreglos
var nombres = ["Leonidas", "Harvey", "Cvander", "Freddier"]
var nombres = ["Anna", "Alex", "Brian", "Jack", true]
var nombres : String []= ["Leonidas", "Harvey", "Cvander",
"Freddier"]
nombres.append("Ajamaica") nombres += "Vaca"
var nombre = nombres[0]
nombres[4...6] = ["Cambio", “Nuevo"] // sustituye del 4 al 6
nombres.insert("Ricardo", atIndex: 0)
let ricky = nombres.removeAtIndex(0)
for item in nombres {
println(item)
}
Mágia
var threeDoubles = [Double](count: 3, repeatedValue: 0.0)
!
// threeDoubles es tipo [Double], donde tiene [0.0, 0.0, 0.0]
var anotherThree= [Double](count: 3, repeatedValue: 2.5)
// [2.5, 2.5, 2.5]
Diccionarios
var miscursos = ["html": 6, "python": 0, "ios": 4]
miscursos["html"] = "7"
for (curso, veces) in miscursos {
println("(curso): (veces)")
}
Mágia
if let oldValue = miscursos.updateValue(8, forKey: "HTML")
{
println(“Viejo valor (oldValue).")
}
for skey in miscursos.keys {
println("keys: (skey)")
}
IF
Switch
Ejemplo numeros
Ciclos
while !cansado {
correr()
}
!
for var doctor = 1; doctor <= 13; ++doctor {
exterminate(doctor)
}
…
for index in 1...5 {
println("(index) multiplica (index * 5)")
}
var a = 1
var base = 5
// para no tener index
for _ in 1...5 {
a *= base
}
Funciones
Funciones
func diHola(nombre: String) -> String {
let saludo = "Hola, " + nombre + "!"
return saludo
}
println(diHola("Ana"))
func diHola2(nombre: String) -> String {
return "Hola, " + nombre + "!"
}
Multiples datos
func rangoDe(inicio: Int, fin: Int) -> Int {
return fin - inicio
}
println(rango(1, 10))
Sin return
func bye(nombre: String) {
println("bye, (nombre)!")
}
Varios return
Defaults y “títulos de
parametros”
func join(string s1: String, toString s2: String,
withJoiner joiner: String = " ") -> String {
return s1 + joiner + s2
}
join(string: "hello", toString: "world", withJoiner: "-")
join(string: "hello", toString: "world")
Paso por valor
func intercambia(inout a: Int, inout b: Int) {
let tempA = a
a = b
b = tempA
}
var a = 3
var b = 107
intercambia(&someInt, &anotherInt)
println(“Cambio (someInt), y tambien (anotherInt)")
Funciones “Funcionales”
func sumar(a: Int, b: Int) -> Int {
return a + b
}
func multiplicar(a: Int, b: Int) -> Int {
return a * b
}
!
var tempfunc: (Int, Int) -> Int = sumar
!
println("Result: (mathFunction(2, 3))")
tempfunc = multiplicar
println("Result: (mathFunction(2, 3))")
Funciones como parámetro
de otras
func imprimir(tempfunc: (Int, Int) -> Int, a: Int, b: Int) {
println("Resultado: (tempfunc(a, b))")
}
imprimir(sumar, 3, 5)
Closures
Los closures, en castellano cierres o clausuras, son una
potente característica de JavaScript que también podemos
encontrar en otros lenguajes como C#, Objective-C, Eiffel y
otros.
!
Es la manera en como una función dentro de otra función
contenedora puede hacer referencia a las variables
después de que la función contenedora ha terminado de
ejecutarse.
Recuerda el curso Frontend de Mejorando.la
func incrementar(incrementeLaCantidad cantidad: Int) -> () -> Int {
var corrio = 0
!
func incrementador() -> Int {
corrio += cantidad
return corrio
}
!
return incrementador
}
!
let incrementa10 = incrementar(forIncrement: 10)
let incrementa20 = incrementar(forIncrement: 20)
!
incrementa10()
incrementa20()
var numbers = [20, 19, 7, 12]
!
numbers.map({
(number: Int) -> Int in
if n % 2 == 0 {
return n
}
else {
return 0
}
})
!
La function map ejecuta el
closure para cada elemento del
arrego.
var reversa = sorted(nombres, { (s1: Int, s2: Int) -> Bool in
return s1 > s2
})
func reversaFuncAuc(s1: Int, s2: Int) -> Bool {
return s1 > s2
}
var reversa = sorted(nombres, reversaFuncAuc)
La función sorted
ordena los números
dada una función
var reversed = sorted(nombres, { s1, s2 in return s1 > s2 } )
Newbie
Común
Pro
reversed = sorted(nombres, { $0 > $1 }) Swift
Clases
Estructura básica
class Vehiculo {!
! // propiedades!
// metodos!
// inicializadores!
}
.h
No mas archivos
Herencia
class Vehiculo {
!
}
!
class Bicicleta: Vehiculo {
!
}
Propiedades guardadas
class Vehiculo {
var numero_ruedas = 0
}
Propiedades dinámicas
class Vehiculo {
var numero_ruedas = 0
var descripcion: String {
get {
return "(numero_ruedas) ruedas"
} }
}
Más fácil
class Vehiculo {
var numero_ruedas = 0
var descripcion: String {
return "(numero_ruedas) ruedas"
}
}
Inicializar
let unvehiculo = Vehiculo()
Aquí no hay razón para ser un var. Lo que cambia es el
contenido del objeto no el objeto como tal
Acceder a propiedades
let unvehiculo = Vehiculo()
println(unvehiculo.descripcion)
No lleva () por que no es una función. Por eso vimos
closures. Es como un @property de python
unvehiculo.ruedas = 4
Inicialización
class Bicicleta: Vehiculo {
init() {
super.init()
ruedas = 2
} }
let bici = Bicicleta()
Override
class Auto: Vehiculo {
var velocidad = 0.0
init() {
super.init()
ruedas = 4
}
override var descripcion: String {
return super.description + ", (speed) km/h"
}
}
Metodos
class Contador {
var total = 0
func incrementa(cantidad: Int) {
total += cantidad
}
func resetea_a_nuevo(nuevo: Int) {
self.total = nuevo
}
}
Structs
Structs
Playground
• Colors
• Strings (plain and attributed) Images
• Views
• Arrays and dictionaries Points, rects, sizes
• Bézier paths
• URLs
• Classes and structs
Optional Chaining
Automatic Reference
Counting
Uno de los cambios más abrumadores de iOS ha sido la
inclusión de ARC (Automatic Reference Counting), lo cual facilita
al desarrollador la gestión de memoria, uno de los puntos mas
conflictivos del desarrollo iOS.
!
Esto erá el cancer de IOS hasta la llegada de ARC.
Un concepto que deberemos tener siempre en mente es
el tipo de relación que queremos establecer entre el
puntero y los objetos a los que apunta. Ésta podrá ser de
dos tipos dependiendo de su naturaleza:
!
Strong: un puntero de este tipo, implica que nuestra
variable será la dueña del objeto al que apunta el
puntero, y por tanto no se liberará el mismo mientras el
puntero siga activo.
!
Weak: es un puntero que no implica que nuestra variable
sea dueña del objeto apuntado. De este modo, si por
cualquier motivo el objeto apuntado fuera liberado,
nuestro puntero pasaría ser automáticamente NIL (esto
evita que se produzcan errores por apuntar a direcciones
de memoria inexistentes).
weakstrong
Otras cosas que hay…
Tarea
• Observers
• Enums en Structs
• Extensions
• Optional Return Types
Consultar
https://developer.apple.com/library/prerelease/mac/
documentation/Swift/Conceptual/
Swift_Programming_Language/TheBasics.html#//apple_ref/
doc/uid/TP40014097-CH5-XID_443
Día 2
Xcode
Live Rendering
Tour
AutoLayout (nuevo)
UITableViewController
La vista de tabla (UITableView) es el componente central en
muchas aplicaciones. Es un elemento con muchas opciones, es
importante que aprendamos a utilizarlas correctamente.
!
Las clases que intervienen a la hora de representar una tabla son:
UITableView : La tabla en sí
UITableViewCell : Cada una de las celdas de una tabla
!
Para empezar a trabajar con las tablas, vamos a crear un nuevo
controlador que llamaremos CTControllerView y haremos que sea
una subclase de UITableViewController.
UITableview
• Viendo la implementación que nos creó por defecto Xcode, vemos que hay
muchos métodos propios de un controlador de tabla.
• Estos métodos en realidad son de los protocolosUITableViewDelegate y
UITableViewDataSource. El delegate tiene información de cómo se tiene que
comportar la tabla, por ejemplo el tamaño de las celdas, el método que se ejecuta
cuando se selecciona una celda, etc. Por otro lado, el datasource tiene
información del contenido que tiene que mostrar la tabla, por ejemplo el número
de celdas, el número de secciones, el contenido de las celdas, etc. Revisa la
documentación de las dos clases para que veas los métodos que tienen.
• Observando la documentación vemos que los únicos métodos que son requeridos
son:
• tableView:cellForRowAtIndexPath : Devuelve la celda configurada.
• tableView:numberOfRowsInSection : Devuelve el número de celdas que hay en
cada sección. Por defecto hay una única sección.
Cell Patrón
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:
(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
}
Object *objeto = [arreglo.data objectAtIndex: indexPath.row];
cell.textLabel.text = objeto.nombre;
return cell;
}
Cocoapods y Parse

Contenu connexe

Tendances (19)

El lenguaje de pogramación C++
El lenguaje de pogramación C++El lenguaje de pogramación C++
El lenguaje de pogramación C++
 
Semana 1 Estructuras de Control en Java
Semana 1   Estructuras de Control en JavaSemana 1   Estructuras de Control en Java
Semana 1 Estructuras de Control en Java
 
Lenguajec++
Lenguajec++Lenguajec++
Lenguajec++
 
Java clases dictadas
Java clases dictadasJava clases dictadas
Java clases dictadas
 
Ios.s2
Ios.s2Ios.s2
Ios.s2
 
Javascript C#
Javascript C#Javascript C#
Javascript C#
 
Pl
PlPl
Pl
 
Semana 4 Introduccion Javascript
Semana 4   Introduccion JavascriptSemana 4   Introduccion Javascript
Semana 4 Introduccion Javascript
 
Introducción a Swift
Introducción a SwiftIntroducción a Swift
Introducción a Swift
 
Comandos de Raptor, Java y C# Sharp
Comandos de Raptor, Java y C# SharpComandos de Raptor, Java y C# Sharp
Comandos de Raptor, Java y C# Sharp
 
Perl1 escalares
Perl1 escalaresPerl1 escalares
Perl1 escalares
 
Mac
MacMac
Mac
 
3 Introducción al lenguaje PHP
3 Introducción al lenguaje PHP3 Introducción al lenguaje PHP
3 Introducción al lenguaje PHP
 
comandos
comandoscomandos
comandos
 
Ruby en 20 minutos
Ruby en 20 minutosRuby en 20 minutos
Ruby en 20 minutos
 
05. Creando e implementando objetos y métodos
05. Creando e implementando objetos y métodos05. Creando e implementando objetos y métodos
05. Creando e implementando objetos y métodos
 
Curso Javascript profesionales
Curso Javascript profesionalesCurso Javascript profesionales
Curso Javascript profesionales
 
Tema3 p2%20
Tema3 p2%20Tema3 p2%20
Tema3 p2%20
 
Javascript 1
Javascript 1Javascript 1
Javascript 1
 

En vedette

Curso de Desarrollo Web de Platzi
Curso de Desarrollo Web de PlatziCurso de Desarrollo Web de Platzi
Curso de Desarrollo Web de PlatziCarlos Azaustre
 
Generadores Web en Salto - Claudia Murialdo
Generadores Web en Salto - Claudia MurialdoGeneradores Web en Salto - Claudia Murialdo
Generadores Web en Salto - Claudia MurialdoGeneXus
 
Neurociencia aplicada al desarrollo con GeneXus - Gustavo Tejera
Neurociencia aplicada al desarrollo con GeneXus - Gustavo TejeraNeurociencia aplicada al desarrollo con GeneXus - Gustavo Tejera
Neurociencia aplicada al desarrollo con GeneXus - Gustavo TejeraGeneXus
 
0041 rest web_services_en_genexus
0041 rest web_services_en_genexus0041 rest web_services_en_genexus
0041 rest web_services_en_genexusGeneXus
 
Laboratorio: Desarrollo de aplicaciones Web con GeneXus Evolution 3 y Salto
Laboratorio: Desarrollo de aplicaciones Web con GeneXus Evolution 3 y SaltoLaboratorio: Desarrollo de aplicaciones Web con GeneXus Evolution 3 y Salto
Laboratorio: Desarrollo de aplicaciones Web con GeneXus Evolution 3 y SaltoGeneXus
 
Laboratorio: Desarrollo de aplicaciones Web con GeneXus Evolution 3 y Salto (...
Laboratorio: Desarrollo de aplicaciones Web con GeneXus Evolution 3 y Salto (...Laboratorio: Desarrollo de aplicaciones Web con GeneXus Evolution 3 y Salto (...
Laboratorio: Desarrollo de aplicaciones Web con GeneXus Evolution 3 y Salto (...GeneXus
 
Swift Programming Basics (Part I)
Swift Programming Basics (Part I)Swift Programming Basics (Part I)
Swift Programming Basics (Part I)Alberto Pacheco
 
“Capitalismo y esquizofrenia” gilles deleuze y félix guattari.
“Capitalismo y esquizofrenia”  gilles deleuze y félix guattari.“Capitalismo y esquizofrenia”  gilles deleuze y félix guattari.
“Capitalismo y esquizofrenia” gilles deleuze y félix guattari.Eleonora_que_ignora
 
GeneXus Apps UI / UX Kit - Gabriel Simonet
GeneXus Apps UI / UX Kit - Gabriel SimonetGeneXus Apps UI / UX Kit - Gabriel Simonet
GeneXus Apps UI / UX Kit - Gabriel SimonetGeneXus
 
Construya las aplicaciones del futuro ¡hoy!
Construya las aplicaciones del futuro ¡hoy!Construya las aplicaciones del futuro ¡hoy!
Construya las aplicaciones del futuro ¡hoy!GeneXus
 
Metodologías de desarrollo ágiles: Scrum, XP
Metodologías de desarrollo ágiles: Scrum, XPMetodologías de desarrollo ágiles: Scrum, XP
Metodologías de desarrollo ágiles: Scrum, XPejordi
 
TypeScript: Un lenguaje aburrido para programadores torpes y tristes
TypeScript: Un lenguaje aburrido para programadores torpes y tristesTypeScript: Un lenguaje aburrido para programadores torpes y tristes
TypeScript: Un lenguaje aburrido para programadores torpes y tristesMicael Gallego
 

En vedette (20)

Tutorial de Lenguaje de Programación Swift
Tutorial de Lenguaje de Programación SwiftTutorial de Lenguaje de Programación Swift
Tutorial de Lenguaje de Programación Swift
 
Curso de Desarrollo Web de Platzi
Curso de Desarrollo Web de PlatziCurso de Desarrollo Web de Platzi
Curso de Desarrollo Web de Platzi
 
Hola Swift
Hola SwiftHola Swift
Hola Swift
 
Diploma Backend Developer
Diploma Backend DeveloperDiploma Backend Developer
Diploma Backend Developer
 
Generadores Web en Salto - Claudia Murialdo
Generadores Web en Salto - Claudia MurialdoGeneradores Web en Salto - Claudia Murialdo
Generadores Web en Salto - Claudia Murialdo
 
Neurociencia aplicada al desarrollo con GeneXus - Gustavo Tejera
Neurociencia aplicada al desarrollo con GeneXus - Gustavo TejeraNeurociencia aplicada al desarrollo con GeneXus - Gustavo Tejera
Neurociencia aplicada al desarrollo con GeneXus - Gustavo Tejera
 
Diploma programacion-android
Diploma programacion-androidDiploma programacion-android
Diploma programacion-android
 
Diploma google-fullstack
Diploma google-fullstackDiploma google-fullstack
Diploma google-fullstack
 
0041 rest web_services_en_genexus
0041 rest web_services_en_genexus0041 rest web_services_en_genexus
0041 rest web_services_en_genexus
 
Swift
SwiftSwift
Swift
 
Laboratorio: Desarrollo de aplicaciones Web con GeneXus Evolution 3 y Salto
Laboratorio: Desarrollo de aplicaciones Web con GeneXus Evolution 3 y SaltoLaboratorio: Desarrollo de aplicaciones Web con GeneXus Evolution 3 y Salto
Laboratorio: Desarrollo de aplicaciones Web con GeneXus Evolution 3 y Salto
 
Laboratorio: Desarrollo de aplicaciones Web con GeneXus Evolution 3 y Salto (...
Laboratorio: Desarrollo de aplicaciones Web con GeneXus Evolution 3 y Salto (...Laboratorio: Desarrollo de aplicaciones Web con GeneXus Evolution 3 y Salto (...
Laboratorio: Desarrollo de aplicaciones Web con GeneXus Evolution 3 y Salto (...
 
Swift Programming Basics (Part I)
Swift Programming Basics (Part I)Swift Programming Basics (Part I)
Swift Programming Basics (Part I)
 
El rizoma deleuze (jaime reyes-f)
El rizoma   deleuze (jaime reyes-f)El rizoma   deleuze (jaime reyes-f)
El rizoma deleuze (jaime reyes-f)
 
“Capitalismo y esquizofrenia” gilles deleuze y félix guattari.
“Capitalismo y esquizofrenia”  gilles deleuze y félix guattari.“Capitalismo y esquizofrenia”  gilles deleuze y félix guattari.
“Capitalismo y esquizofrenia” gilles deleuze y félix guattari.
 
GeneXus Apps UI / UX Kit - Gabriel Simonet
GeneXus Apps UI / UX Kit - Gabriel SimonetGeneXus Apps UI / UX Kit - Gabriel Simonet
GeneXus Apps UI / UX Kit - Gabriel Simonet
 
Construya las aplicaciones del futuro ¡hoy!
Construya las aplicaciones del futuro ¡hoy!Construya las aplicaciones del futuro ¡hoy!
Construya las aplicaciones del futuro ¡hoy!
 
Metodologías de desarrollo ágiles: Scrum, XP
Metodologías de desarrollo ágiles: Scrum, XPMetodologías de desarrollo ágiles: Scrum, XP
Metodologías de desarrollo ágiles: Scrum, XP
 
TypeScript: Un lenguaje aburrido para programadores torpes y tristes
TypeScript: Un lenguaje aburrido para programadores torpes y tristesTypeScript: Un lenguaje aburrido para programadores torpes y tristes
TypeScript: Un lenguaje aburrido para programadores torpes y tristes
 
Tecnologias para el desarrollo Web
Tecnologias para el desarrollo WebTecnologias para el desarrollo Web
Tecnologias para el desarrollo Web
 

Similaire à Curso Swift

Similaire à Curso Swift (20)

Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript
Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript
Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript
 
Tutorial en Apache Spark - Clasificando tweets en realtime
Tutorial en Apache Spark - Clasificando tweets en realtimeTutorial en Apache Spark - Clasificando tweets en realtime
Tutorial en Apache Spark - Clasificando tweets en realtime
 
React
ReactReact
React
 
Codemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícilCodemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícil
 
Java
JavaJava
Java
 
Java
JavaJava
Java
 
Diapositivas de JAVA
Diapositivas de JAVADiapositivas de JAVA
Diapositivas de JAVA
 
JavaScript para desarrolladores c#
JavaScript para desarrolladores c#JavaScript para desarrolladores c#
JavaScript para desarrolladores c#
 
Primeros Ejemplos Usando Operadores en Visual C# (C Sharp)
Primeros Ejemplos Usando Operadores en Visual C# (C Sharp)Primeros Ejemplos Usando Operadores en Visual C# (C Sharp)
Primeros Ejemplos Usando Operadores en Visual C# (C Sharp)
 
Integrando Swift y Objective-C
Integrando Swift y Objective-CIntegrando Swift y Objective-C
Integrando Swift y Objective-C
 
TUTORIAL JAVA
TUTORIAL JAVATUTORIAL JAVA
TUTORIAL JAVA
 
Jruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMJruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVM
 
C ++
C ++C ++
C ++
 
Fondo1 (2)
Fondo1 (2)Fondo1 (2)
Fondo1 (2)
 
JAVA.PPT
JAVA.PPTJAVA.PPT
JAVA.PPT
 
JAVA (1).PPT
JAVA (1).PPTJAVA (1).PPT
JAVA (1).PPT
 
JAVA (1).PPT
JAVA (1).PPTJAVA (1).PPT
JAVA (1).PPT
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
 
Java 8
Java 8Java 8
Java 8
 
Curso basico c sharp
Curso basico c sharpCurso basico c sharp
Curso basico c sharp
 

Plus de Platzi

Presentación Reporte de Impacto Platzi 2018
Presentación Reporte de Impacto Platzi 2018Presentación Reporte de Impacto Platzi 2018
Presentación Reporte de Impacto Platzi 2018Platzi
 
Inbound Marketing
Inbound MarketingInbound Marketing
Inbound MarketingPlatzi
 
Qué es Growth Hacking
Qué es Growth HackingQué es Growth Hacking
Qué es Growth HackingPlatzi
 
¿Qué es el Seo?
¿Qué es el Seo?¿Qué es el Seo?
¿Qué es el Seo?Platzi
 
Cómo hacer Link Building
Cómo hacer Link Building Cómo hacer Link Building
Cómo hacer Link Building Platzi
 
Cómo hacer Local SEO
Cómo hacer Local SEOCómo hacer Local SEO
Cómo hacer Local SEOPlatzi
 
Curso SEO
Curso SEOCurso SEO
Curso SEOPlatzi
 
Inbound marketing
Inbound marketingInbound marketing
Inbound marketingPlatzi
 
Curso IOS - Intro2
Curso IOS - Intro2Curso IOS - Intro2
Curso IOS - Intro2Platzi
 
Curso IOS - Intro
Curso IOS - IntroCurso IOS - Intro
Curso IOS - IntroPlatzi
 
Curso Android - Clase 6
Curso Android - Clase 6Curso Android - Clase 6
Curso Android - Clase 6Platzi
 
Curso Android - Clase 5
Curso Android - Clase 5 Curso Android - Clase 5
Curso Android - Clase 5 Platzi
 
Curso Android - Clase 4
Curso Android - Clase 4 Curso Android - Clase 4
Curso Android - Clase 4 Platzi
 
Curso Android - Intro, almacenamiento y mapas - Clase 3
Curso Android - Intro, almacenamiento y mapas - Clase 3Curso Android - Intro, almacenamiento y mapas - Clase 3
Curso Android - Intro, almacenamiento y mapas - Clase 3Platzi
 
Curso Android - Listas, grids y personalizacion - Clase 2
Curso Android - Listas, grids y personalizacion - Clase 2Curso Android - Listas, grids y personalizacion - Clase 2
Curso Android - Listas, grids y personalizacion - Clase 2Platzi
 
Introducción a Android - clase 1
Introducción a Android - clase 1Introducción a Android - clase 1
Introducción a Android - clase 1Platzi
 

Plus de Platzi (16)

Presentación Reporte de Impacto Platzi 2018
Presentación Reporte de Impacto Platzi 2018Presentación Reporte de Impacto Platzi 2018
Presentación Reporte de Impacto Platzi 2018
 
Inbound Marketing
Inbound MarketingInbound Marketing
Inbound Marketing
 
Qué es Growth Hacking
Qué es Growth HackingQué es Growth Hacking
Qué es Growth Hacking
 
¿Qué es el Seo?
¿Qué es el Seo?¿Qué es el Seo?
¿Qué es el Seo?
 
Cómo hacer Link Building
Cómo hacer Link Building Cómo hacer Link Building
Cómo hacer Link Building
 
Cómo hacer Local SEO
Cómo hacer Local SEOCómo hacer Local SEO
Cómo hacer Local SEO
 
Curso SEO
Curso SEOCurso SEO
Curso SEO
 
Inbound marketing
Inbound marketingInbound marketing
Inbound marketing
 
Curso IOS - Intro2
Curso IOS - Intro2Curso IOS - Intro2
Curso IOS - Intro2
 
Curso IOS - Intro
Curso IOS - IntroCurso IOS - Intro
Curso IOS - Intro
 
Curso Android - Clase 6
Curso Android - Clase 6Curso Android - Clase 6
Curso Android - Clase 6
 
Curso Android - Clase 5
Curso Android - Clase 5 Curso Android - Clase 5
Curso Android - Clase 5
 
Curso Android - Clase 4
Curso Android - Clase 4 Curso Android - Clase 4
Curso Android - Clase 4
 
Curso Android - Intro, almacenamiento y mapas - Clase 3
Curso Android - Intro, almacenamiento y mapas - Clase 3Curso Android - Intro, almacenamiento y mapas - Clase 3
Curso Android - Intro, almacenamiento y mapas - Clase 3
 
Curso Android - Listas, grids y personalizacion - Clase 2
Curso Android - Listas, grids y personalizacion - Clase 2Curso Android - Listas, grids y personalizacion - Clase 2
Curso Android - Listas, grids y personalizacion - Clase 2
 
Introducción a Android - clase 1
Introducción a Android - clase 1Introducción a Android - clase 1
Introducción a Android - clase 1
 

Dernier

El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..RobertoGumucio2
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 

Dernier (20)

El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 

Curso Swift

  • 2. Contenido • Lo básico : Variables, Constantes, Tipado, Strings, Colecciones • Operadores, Funciones y Controladores de Flujo Clases y propiedades • Closures, Chaining • Clases • Memory management Initialization • Swift Playgrounds • Xcode con Storyboard • Autolayout y nuevo modelo de Resizing de apps • Primera app ios con Swift • Swift usando cosas de Objective C • Cocoapods * • MVCD : Modelo - Vista - Controlador - Delegate - Datasource * • Controladores : UITableViewControllers, UINavigationController, UITabbarController y UIController * • Modelos y Parse *
  • 3. Por que Swift y no empezar con Objective C • Es más fácil de entender. Mucho más • Por que Apple realmente esta comprometido en apoyarlo • Por que no es obligatorio usarlo ni hay que migrar nada a lo nuevo • Es excelente para aprender • Reduce el tamaño de los proyectos, en un 25% • Toda el API de Apple lo soporta y es totalmente retrocompatible.
  • 4. Por que NO Swift y mejor empezar con Objective C • Por que no hay documentación completa aún en sitios conocidos. Creemosla! • Por que al googlear solo hay cosas de Taylor y códigos interbancarios • Por que al final uno termina aprendiendo Objective C al mismo tiempo.
  • 5.
  • 8. A considerar • Swift es una versión final, Xcode ni IOS 8 lo son • Hay bugs conocidos en los betas. (Yo uso el Beta 2 de XCode) • Es posible que muchas cosas de Apple esten en NDA. Revise todo para que lo que esté aquí no lo esté • Mi Xcode puede tronar en cualquier momento. Tengan un poco de paciencia si esto ocurre.
  • 10. Variables var languageName: String = "Swift" Reservada Nombre String Tipo
  • 11. Variable NO MUTABLE let languageName: String = "Swift" AKA Constante Variables que no cambian después de crearse. Ahorramos memória
  • 12. Declaración : Optionals No existe en C o en Objective-C Es básicamente y en pocas palabras permitir variables poder ser nil o no permitirles. var serverResponseCode: Int? = 404 serverResponseCode = nil var surveyAnswer: String? // automáticamente nil
  • 13. Unwarping let possibleString: String? = “string." // nil o string println(possibleString!) // para verificar que no sea nil let assumedString: String! = “implicito" // siempre existe println(assumedString) // no se necesita
  • 14. Pueden ser de mas tipos ¿Es enserio? tanto para casi volver a escribir mucho código
  • 17. Strings let i_am_a_string = “Soy un String" let i_am_a_string2 = ‘Soy un String’
  • 18. for caracter in “mejorando.la" { println(caracter) } m e j o r a n d …
  • 19. 🐭 🐭 🐭 🐭 for caracter in “🐭🐭🐭🐭" { println(caracter) }
  • 22. Mutabilidad var variableString = "Hola" variableString += " como estan" let constantString = "Hola" constantString += “como estan"
  • 23. Arreglos var nombres = ["Leonidas", "Harvey", "Cvander", "Freddier"] var nombres = ["Anna", "Alex", "Brian", "Jack", true] var nombres : String []= ["Leonidas", "Harvey", "Cvander", "Freddier"] nombres.append("Ajamaica") nombres += "Vaca"
  • 24. var nombre = nombres[0] nombres[4...6] = ["Cambio", “Nuevo"] // sustituye del 4 al 6 nombres.insert("Ricardo", atIndex: 0) let ricky = nombres.removeAtIndex(0) for item in nombres { println(item) }
  • 25. Mágia var threeDoubles = [Double](count: 3, repeatedValue: 0.0) ! // threeDoubles es tipo [Double], donde tiene [0.0, 0.0, 0.0] var anotherThree= [Double](count: 3, repeatedValue: 2.5) // [2.5, 2.5, 2.5]
  • 26. Diccionarios var miscursos = ["html": 6, "python": 0, "ios": 4] miscursos["html"] = "7" for (curso, veces) in miscursos { println("(curso): (veces)") }
  • 27. Mágia if let oldValue = miscursos.updateValue(8, forKey: "HTML") { println(“Viejo valor (oldValue).") } for skey in miscursos.keys { println("keys: (skey)") }
  • 28. IF
  • 30. Ciclos while !cansado { correr() } ! for var doctor = 1; doctor <= 13; ++doctor { exterminate(doctor) }
  • 31. … for index in 1...5 { println("(index) multiplica (index * 5)") } var a = 1 var base = 5 // para no tener index for _ in 1...5 { a *= base }
  • 32.
  • 34. Funciones func diHola(nombre: String) -> String { let saludo = "Hola, " + nombre + "!" return saludo } println(diHola("Ana")) func diHola2(nombre: String) -> String { return "Hola, " + nombre + "!" }
  • 35. Multiples datos func rangoDe(inicio: Int, fin: Int) -> Int { return fin - inicio } println(rango(1, 10))
  • 36. Sin return func bye(nombre: String) { println("bye, (nombre)!") }
  • 38. Defaults y “títulos de parametros” func join(string s1: String, toString s2: String, withJoiner joiner: String = " ") -> String { return s1 + joiner + s2 } join(string: "hello", toString: "world", withJoiner: "-") join(string: "hello", toString: "world")
  • 39. Paso por valor func intercambia(inout a: Int, inout b: Int) { let tempA = a a = b b = tempA } var a = 3 var b = 107 intercambia(&someInt, &anotherInt) println(“Cambio (someInt), y tambien (anotherInt)")
  • 40. Funciones “Funcionales” func sumar(a: Int, b: Int) -> Int { return a + b } func multiplicar(a: Int, b: Int) -> Int { return a * b } ! var tempfunc: (Int, Int) -> Int = sumar ! println("Result: (mathFunction(2, 3))") tempfunc = multiplicar println("Result: (mathFunction(2, 3))")
  • 41. Funciones como parámetro de otras func imprimir(tempfunc: (Int, Int) -> Int, a: Int, b: Int) { println("Resultado: (tempfunc(a, b))") } imprimir(sumar, 3, 5)
  • 42. Closures Los closures, en castellano cierres o clausuras, son una potente característica de JavaScript que también podemos encontrar en otros lenguajes como C#, Objective-C, Eiffel y otros. ! Es la manera en como una función dentro de otra función contenedora puede hacer referencia a las variables después de que la función contenedora ha terminado de ejecutarse. Recuerda el curso Frontend de Mejorando.la
  • 43. func incrementar(incrementeLaCantidad cantidad: Int) -> () -> Int { var corrio = 0 ! func incrementador() -> Int { corrio += cantidad return corrio } ! return incrementador } ! let incrementa10 = incrementar(forIncrement: 10) let incrementa20 = incrementar(forIncrement: 20) ! incrementa10() incrementa20()
  • 44. var numbers = [20, 19, 7, 12] ! numbers.map({ (number: Int) -> Int in if n % 2 == 0 { return n } else { return 0 } }) ! La function map ejecuta el closure para cada elemento del arrego.
  • 45. var reversa = sorted(nombres, { (s1: Int, s2: Int) -> Bool in return s1 > s2 }) func reversaFuncAuc(s1: Int, s2: Int) -> Bool { return s1 > s2 } var reversa = sorted(nombres, reversaFuncAuc) La función sorted ordena los números dada una función var reversed = sorted(nombres, { s1, s2 in return s1 > s2 } ) Newbie Común Pro reversed = sorted(nombres, { $0 > $1 }) Swift
  • 47. Estructura básica class Vehiculo {! ! // propiedades! // metodos! // inicializadores! }
  • 49. Herencia class Vehiculo { ! } ! class Bicicleta: Vehiculo { ! }
  • 50. Propiedades guardadas class Vehiculo { var numero_ruedas = 0 }
  • 51. Propiedades dinámicas class Vehiculo { var numero_ruedas = 0 var descripcion: String { get { return "(numero_ruedas) ruedas" } } }
  • 52. Más fácil class Vehiculo { var numero_ruedas = 0 var descripcion: String { return "(numero_ruedas) ruedas" } }
  • 53. Inicializar let unvehiculo = Vehiculo() Aquí no hay razón para ser un var. Lo que cambia es el contenido del objeto no el objeto como tal
  • 54. Acceder a propiedades let unvehiculo = Vehiculo() println(unvehiculo.descripcion) No lleva () por que no es una función. Por eso vimos closures. Es como un @property de python unvehiculo.ruedas = 4
  • 55. Inicialización class Bicicleta: Vehiculo { init() { super.init() ruedas = 2 } } let bici = Bicicleta()
  • 56. Override class Auto: Vehiculo { var velocidad = 0.0 init() { super.init() ruedas = 4 } override var descripcion: String { return super.description + ", (speed) km/h" } }
  • 57. Metodos class Contador { var total = 0 func incrementa(cantidad: Int) { total += cantidad } func resetea_a_nuevo(nuevo: Int) { self.total = nuevo } }
  • 60. Playground • Colors • Strings (plain and attributed) Images • Views • Arrays and dictionaries Points, rects, sizes • Bézier paths • URLs • Classes and structs
  • 62.
  • 63. Automatic Reference Counting Uno de los cambios más abrumadores de iOS ha sido la inclusión de ARC (Automatic Reference Counting), lo cual facilita al desarrollador la gestión de memoria, uno de los puntos mas conflictivos del desarrollo iOS. ! Esto erá el cancer de IOS hasta la llegada de ARC.
  • 64. Un concepto que deberemos tener siempre en mente es el tipo de relación que queremos establecer entre el puntero y los objetos a los que apunta. Ésta podrá ser de dos tipos dependiendo de su naturaleza: ! Strong: un puntero de este tipo, implica que nuestra variable será la dueña del objeto al que apunta el puntero, y por tanto no se liberará el mismo mientras el puntero siga activo. ! Weak: es un puntero que no implica que nuestra variable sea dueña del objeto apuntado. De este modo, si por cualquier motivo el objeto apuntado fuera liberado, nuestro puntero pasaría ser automáticamente NIL (esto evita que se produzcan errores por apuntar a direcciones de memoria inexistentes).
  • 66. Otras cosas que hay… Tarea • Observers • Enums en Structs • Extensions • Optional Return Types
  • 69. Xcode
  • 70.
  • 72. Tour
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79. UITableViewController La vista de tabla (UITableView) es el componente central en muchas aplicaciones. Es un elemento con muchas opciones, es importante que aprendamos a utilizarlas correctamente. ! Las clases que intervienen a la hora de representar una tabla son: UITableView : La tabla en sí UITableViewCell : Cada una de las celdas de una tabla ! Para empezar a trabajar con las tablas, vamos a crear un nuevo controlador que llamaremos CTControllerView y haremos que sea una subclase de UITableViewController.
  • 80. UITableview • Viendo la implementación que nos creó por defecto Xcode, vemos que hay muchos métodos propios de un controlador de tabla. • Estos métodos en realidad son de los protocolosUITableViewDelegate y UITableViewDataSource. El delegate tiene información de cómo se tiene que comportar la tabla, por ejemplo el tamaño de las celdas, el método que se ejecuta cuando se selecciona una celda, etc. Por otro lado, el datasource tiene información del contenido que tiene que mostrar la tabla, por ejemplo el número de celdas, el número de secciones, el contenido de las celdas, etc. Revisa la documentación de las dos clases para que veas los métodos que tienen. • Observando la documentación vemos que los únicos métodos que son requeridos son: • tableView:cellForRowAtIndexPath : Devuelve la celda configurada. • tableView:numberOfRowsInSection : Devuelve el número de celdas que hay en cada sección. Por defecto hay una única sección.
  • 81. Cell Patrón - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if(cell == nil){ cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } Object *objeto = [arreglo.data objectAtIndex: indexPath.row]; cell.textLabel.text = objeto.nombre; return cell; }