SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
Swift: Una introducción
• Seguro

• Moderno

• Potente
Sergio González Linares
@sergiogl_
Desarrollador iOS y web
Algunas características (I)
• Nuevo lenguaje de programación para el desarrollo de
aplicaciones en iOS y OS X.

• Desarrollado a lo largo de 4 años.

• Basado en C y Objective-C, sin sus restricciones.

• Sintaxis sencilla, similar a otros lenguajes.

• Curva de aprendizaje menor que Objective-C.

• Gestión de memoria con Reference Automatic Counting (ARC).

• Interoperabilidad mix-and-match con el código en Objective-C.

• Soporta playgrounds.
Algunas características (II)
• Los nombres de constantes y variables pueden incluir casi
cualquier carácter, incluyendo caracteres Unicode.

• Permite anidar comentarios multilínea (/* */).

• El punto y coma al final de las sentencias es opcional.

• Los paréntesis en las condiciones son opcionales.

• Se pueden definir alias para tipos de datos existentes mediante
typealias.

• Nil no es un puntero a un objeto inexistente. Indica la ausencia
de valor.
Constantes y variables.
Inferencia de tipos
var miVariableInt = 10
var miVariableFloat = 10.0
let miConstante = 5
let π = 3.1415927
var miCadena: String
var miDoubleExplicito: Double = 10
Constantes:
Variables:
Especificando tipo:
Conversión de tipos: let mensaje = “Su peso es “
let peso = 60
let mensajeCompleto = mensaje + String(peso)
Cadenas.

Arrays y diccionarios
let cervezas = 5
let calimochos = 7
let mensaje = “Me he bebido (cervezas + calimochos) copas. ¡Hip!”
Las cadenas (Strings) son ahora un tipo por valor.
Se pueden concatenar con + y comparar con ==.
Permiten incluir valores y operaciones:
Arrays: let arrayVacio = String[]()
let arrayInferido = []
var arrayMutable = [“Alfa”, “Bravo”, “Charlie”, “Urdangarín”]
arrayMutable[3] = “Delta”
Diccionarios: let diccionarioVacio = Dictionary<String, Int>()
let diccionarioInferido = [:]
var diccionarioMutable = [“Objective-C”: 1980, “Java” : 1995]
diccionarioMutable[“Swift”] = 2014
Tuplas y opcionales
let unPokemon = (25, “Pikachu”)
println (“El pokémon número (unPokemon.0) se llama (unPokemon.1)”)
!
let (num, nombre) = unPokemon
println (“El pokémon número (num) se llama (nombre)”)
!
let otroPokemon = (num: 4, nombre: “Charmander”)
println (“El pokémon número (otroPokemon.num) se llama (otroPokemon.nombre)”)
Las tuplas permiten agrupar dos o más valores, del mismo o de
distinto tipo, en un único valor compuesto:
Los opcionales son valores que pueden existir… o no:
let personajes = [“Gandalf”: “Mago”, “Bilbo”: “Pícaro”, “Thorin”: “Guerrero”]
!
let clase: String? = personajes[“Tauriel”]
if clase {
println(“Tauriel es de clase (clase)”)
} else {
println(“¿Quién demonios es Tauriel?”)
}
Funciones (I)
func saludar(nombre: String) -> String {
return “Ola k ase, “ + nombre
}
Función que devuelve un valor:
func sumar(sumando1: Int, sumando2: Int) -> Int {
return sumando1 + sumando2
}
Función con varios parámetros:
func despedirse() -> String {
return “Me las piro vampiro”
}
Función sin parámetros:
func cantar() {
println(“Échame una mano, prima, que viene mi novio a verme...”)
}
Función que no devuelve ningún valor:
Funciones (II)
func descomponer(valor: Float) -> (parteEntera: Int, parteDecimal: Float) {
let parteEntera = Int(valor)
let parteDecimal = valor - Float(parteEntera)
return (parteEntera, parteDecimal)
}
!
let (parteEntera, parteDecimal) = descomponer (3.1415927)
Función que devuelve múltiples valores:
func unirCadena(cadena s1:String, conCadena s2:String) -> String {
return s1 + s2
}
!
unirCadena (cadena: “Hola ”, conCadena: “caracola”)
Función con parámetros con nombres externos:
func incrementar(numero: Int, incremento: Int = 1) -> Int {
return numero + incremento
}
Parámetros con valores por defecto:
Closures (Clausuras)
let saludoConClausura = {
println (“Hola, soy una clausura”)
}
!
saludoConClausura()
Una clausura es un bloque autocontenido con una función
determinada, que puede usarse en cualquier parte de nuestro
código. Es un concepto similar a los bloques de C.
func repetir(veces: Int, tarea: () -> ()) {
for i in 0..veces {
tarea()
}
}
!
repetir (4, saludoConClausura())
repetir (4, { println (“Hola, directamente desde código”) })
repetir (4) { println (“Hola, clausura fuera de los parámetros”) }
Las clausuras se pueden utilizar como parámetros en otras
funciones:
Clases (I)
• No es necesario heredar de ninguna superclase.

• ¿Archivos de cabecera? ¿Eso qué es?

• Las instancias gestionan su memoria automáticamente. No más
new, alloc ni init.
class Vehículo {
var númeroDeRuedas = 0
}
class Vehículo {
var númeroDeRuedas = 0
var descripción: String {
get {
return “Este vehículo tiene (númeroDeRuedas) ruedas”
}
}
}
Una clase puede incluir propiedades calculadas (computed
properties):
Clases (II)
class Vehículo {
var númeroDeRuedas = 4
var descripción: String {
return “Este vehículo tiene (númeroDeRuedas) ruedas.”
}
}
Cuando una propiedad calculada es de sólo lectura, nos podemos
ahorrar el get:
var miCarro = Vehículo()
println (miCarro.descripción)
Crear una instancia de la clase y acceder a sus propiedades no
podría ser más sencillo:
Clases (III)
class Bicicleta: Vehículo {
init() {
super.init()
númeroDeRuedas = 2
}
}
!
let miBici = Bicicleta()
println (miBici.descripción)
Aunque no sea necesario, las clases siguen pudiendo heredar
unas de otras.

Cuando una clase hereda de una superclase y modifica las
propiedades heredadas, es necesario crear un inicializador.
Clases (IV)
class Coche: Vehículo {
!
var velocidad = 0.0
!
init() {
super.init()
númeroDeRuedas = 4
}
!
override var descripción: String {
return super.descripción + “, y corre a (velocidad) km/h”
}
}
!
let miCoche = Coche()
println (miCoche.descripción)
Al igual que las propiedades, también se pueden redefinir los
métodos. Para ello se utiliza la palabra override antes de la
declaración del método.
Clases (V)
class CocheDeCani: Coche {
!
override var velocidad: Double {
willSet {
if newValue > 120.0 {
velocidad = 0.0
println (“Unos tíos de verde te han puesto una multa, por listo”)
}
}
didSet {
if oldValue <= 120.0 {
println (“Antes ibas bien, ganso”)
}
}
}
}
Una de las novedades más importantes son los observadores de
propiedades.

Estos observadores permiten reaccionar ante los cambios en las
propiedades de una instancia:
Genéricos
struct Pila<T> {
!
var elementos = T[]()
!
mutating func push(elemento: T) {
elementos.append(elemento)
}
!
mutating func pop() -> T {
return elementos.removeLast()
}
}
!
var pilaCadenas = Pila<String>()
pilaCadenas.push(“Lolailo”)
println (pilaCadenas.pop())
Los genéricos permiten crear una funcionalidad cualquiera,
independientemente del tipo de datos que se vayan a manejar con
ella.
Playgrounds
• Los playgrounds son un nuevo tipo de simulador que permite
modificar nuestro código y ver inmediatamente los cambios.

• Podemos observar de forma gráfica los cambios en el tiempo a
través de una línea temporal o timeline.

• Los playgrounds permiten:

✓ Enseñar a otros a programar de forma sencilla, pudiendo ver
los resultados de lo que hacen en tiempo real.

✓ Diseñar nuevos algoritmos y comprobar sus resultados
inmediatamente.

✓ Crear tests y validar su funcionamiento antes de integrarlos
en una batería de tests.
Recursos
• Página oficial:

https://developer.apple.com/swift/

• Libro gratuito disponible en iBooks.

• Videos for Enterprise App Developers:

https://developer.apple.com/videos/enterprise/

• LearnSwift.tips:

http://www.learnswift.tips

• Learn Swift online:

http://www.learnswiftonline.com

• Swift language highlights: An Objective-C developers perspective:

http://www.macsfan.com/codes/swift-language-highlights-objective-c-
developers-perspective/

• Swift Cheat Sheet:

http://kpbp.github.io/swiftcheatsheet/

• iOS Blogs Swift tutorials:

http://ios-blog.co.uk/swift-tutorials/
Se acabó

Mais conteúdo relacionado

Mais procurados

Mule Librerias en Java
Mule Librerias en JavaMule Librerias en Java
Mule Librerias en JavaManuel Antonio
 
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étodosDanae Aguilar Guzmán
 
Curso de programación iPhone: Cocoa-Touch
Curso de programación iPhone: Cocoa-TouchCurso de programación iPhone: Cocoa-Touch
Curso de programación iPhone: Cocoa-Touchfrr149
 
02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcionalJuan Rodríguez
 
ORM Doctrine
ORM DoctrineORM Doctrine
ORM DoctrineDecharlas
 
1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...
1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...
1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...Jose Emilio Labra Gayo
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scaladhaat
 

Mais procurados (20)

Mule Librerias en Java
Mule Librerias en JavaMule Librerias en Java
Mule Librerias en Java
 
3 Introducción al lenguaje PHP
3 Introducción al lenguaje PHP3 Introducción al lenguaje PHP
3 Introducción al lenguaje PHP
 
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
 
4 Introducción al lenguaje Scala
4 Introducción al lenguaje Scala4 Introducción al lenguaje Scala
4 Introducción al lenguaje Scala
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
 
Codigo
CodigoCodigo
Codigo
 
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 de programación iPhone: Cocoa-Touch
Curso de programación iPhone: Cocoa-TouchCurso de programación iPhone: Cocoa-Touch
Curso de programación iPhone: Cocoa-Touch
 
02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional02 python Programación orientada a objetos y funcional
02 python Programación orientada a objetos y funcional
 
Semana 4 Javascript funciones y Metodos
Semana 4   Javascript funciones y MetodosSemana 4   Javascript funciones y Metodos
Semana 4 Javascript funciones y Metodos
 
Semana 6 Módulos en Python Entrega 2
Semana 6   Módulos en Python Entrega 2Semana 6   Módulos en Python Entrega 2
Semana 6 Módulos en Python Entrega 2
 
Javascript
JavascriptJavascript
Javascript
 
Curso de Python
Curso de PythonCurso de Python
Curso de Python
 
ORM Doctrine
ORM DoctrineORM Doctrine
ORM Doctrine
 
1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...
1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...
1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...
 
C sharp intro1
C sharp intro1C sharp intro1
C sharp intro1
 
Python para principiantes
Python para principiantesPython para principiantes
Python para principiantes
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
 
Introducción a scala
Introducción a scalaIntroducción a scala
Introducción a scala
 
Semana 1 Estructuras de Datos en Java
Semana 1   Estructuras de Datos en JavaSemana 1   Estructuras de Datos en Java
Semana 1 Estructuras de Datos en Java
 

Semelhante a Introducción a Swift (20)

Lenguaje c ++ guía para programadores
Lenguaje c ++  guía para programadoresLenguaje c ++  guía para programadores
Lenguaje c ++ guía para programadores
 
C sharp intro1
C sharp intro1C sharp intro1
C sharp intro1
 
Por que java
Por que javaPor que java
Por que java
 
Java1-Intro.pptbbjjjfdzvñutfdnmj habitación
Java1-Intro.pptbbjjjfdzvñutfdnmj habitaciónJava1-Intro.pptbbjjjfdzvñutfdnmj habitación
Java1-Intro.pptbbjjjfdzvñutfdnmj habitación
 
Java introduccion conceptos basicos una mira
Java introduccion conceptos basicos una miraJava introduccion conceptos basicos una mira
Java introduccion conceptos basicos una mira
 
C sharp intro1
C sharp intro1C sharp intro1
C sharp intro1
 
TUTORIAL JAVA
TUTORIAL JAVATUTORIAL JAVA
TUTORIAL JAVA
 
Cplus
CplusCplus
Cplus
 
C++
C++C++
C++
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
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
 
LibreríAs De Java
LibreríAs De JavaLibreríAs De Java
LibreríAs De Java
 
Php
PhpPhp
Php
 
¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticas¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticas
 
Ruby
Ruby Ruby
Ruby
 
Introduccion clips
Introduccion clipsIntroduccion clips
Introduccion clips
 
Estructura basica para_c_
Estructura basica para_c_Estructura basica para_c_
Estructura basica para_c_
 
Software Clips
Software ClipsSoftware Clips
Software Clips
 

Mais de betabeers

IONIC, el framework para crear aplicaciones híbridas multiplataforma
IONIC, el framework para crear aplicaciones híbridas multiplataformaIONIC, el framework para crear aplicaciones híbridas multiplataforma
IONIC, el framework para crear aplicaciones híbridas multiplataformabetabeers
 
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)betabeers
 
Blockchain: la revolución industrial de internet - Oscar Lage
Blockchain: la revolución industrial de internet - Oscar LageBlockchain: la revolución industrial de internet - Oscar Lage
Blockchain: la revolución industrial de internet - Oscar Lagebetabeers
 
Cloud Learning: la formación del siglo XXI - Mónica Mediavilla
Cloud Learning: la formación del siglo XXI - Mónica MediavillaCloud Learning: la formación del siglo XXI - Mónica Mediavilla
Cloud Learning: la formación del siglo XXI - Mónica Mediavillabetabeers
 
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ónbetabeers
 
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbao
La línea recta hacia el éxito -  Jon Torrado - Betabeers BilbaoLa línea recta hacia el éxito -  Jon Torrado - Betabeers Bilbao
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbaobetabeers
 
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
6 errores a evitar si eres una startup móvil y quieres evolucionar tu appbetabeers
 
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)betabeers
 
Introducción a scrum - Rodrigo Corral (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)Introducción a scrum - Rodrigo Corral (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)betabeers
 
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)betabeers
 
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)betabeers
 
Elemental, querido Watson - Caso de Uso
Elemental, querido Watson - Caso de UsoElemental, querido Watson - Caso de Uso
Elemental, querido Watson - Caso de Usobetabeers
 
Seguridad en tu startup
Seguridad en tu startupSeguridad en tu startup
Seguridad en tu startupbetabeers
 
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.betabeers
 
Buenas prácticas para la optimización web
Buenas prácticas para la optimización webBuenas prácticas para la optimización web
Buenas prácticas para la optimización webbetabeers
 
La magia de Scrum
La magia de ScrumLa magia de Scrum
La magia de Scrumbetabeers
 
Programador++ por @wottam
Programador++ por @wottamProgramador++ por @wottam
Programador++ por @wottambetabeers
 
RaspberryPi: Tu dispositivo para IoT
RaspberryPi: Tu dispositivo para IoTRaspberryPi: Tu dispositivo para IoT
RaspberryPi: Tu dispositivo para IoTbetabeers
 
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015
 Introducción al Big Data - Xabier Tranche  - VIII Betabeers Bilbao 27/02/2015 Introducción al Big Data - Xabier Tranche  - VIII Betabeers Bilbao 27/02/2015
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015betabeers
 
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015betabeers
 

Mais de betabeers (20)

IONIC, el framework para crear aplicaciones híbridas multiplataforma
IONIC, el framework para crear aplicaciones híbridas multiplataformaIONIC, el framework para crear aplicaciones híbridas multiplataforma
IONIC, el framework para crear aplicaciones híbridas multiplataforma
 
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
Servicios de Gestión de Datos en la Nube - Jaime Balañá (NetApp)
 
Blockchain: la revolución industrial de internet - Oscar Lage
Blockchain: la revolución industrial de internet - Oscar LageBlockchain: la revolución industrial de internet - Oscar Lage
Blockchain: la revolución industrial de internet - Oscar Lage
 
Cloud Learning: la formación del siglo XXI - Mónica Mediavilla
Cloud Learning: la formación del siglo XXI - Mónica MediavillaCloud Learning: la formación del siglo XXI - Mónica Mediavilla
Cloud Learning: la formación del siglo XXI - Mónica Mediavilla
 
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
 
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbao
La línea recta hacia el éxito -  Jon Torrado - Betabeers BilbaoLa línea recta hacia el éxito -  Jon Torrado - Betabeers Bilbao
La línea recta hacia el éxito - Jon Torrado - Betabeers Bilbao
 
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
6 errores a evitar si eres una startup móvil y quieres evolucionar tu app
 
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
Dev ops.continuous delivery - Ibon Landa (Plain Concepts)
 
Introducción a scrum - Rodrigo Corral (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)Introducción a scrum - Rodrigo Corral (Plain Concepts)
Introducción a scrum - Rodrigo Corral (Plain Concepts)
 
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
Gestión de proyectos y consorcios internacionales - Iñigo Cañadas (GFI)
 
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
Software de gestión Open Source - Odoo - Bakartxo Aristegi (Aizean)
 
Elemental, querido Watson - Caso de Uso
Elemental, querido Watson - Caso de UsoElemental, querido Watson - Caso de Uso
Elemental, querido Watson - Caso de Uso
 
Seguridad en tu startup
Seguridad en tu startupSeguridad en tu startup
Seguridad en tu startup
 
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
Spark Java: Aplicaciones web ligeras y rápidas con Java, por Fran Paredes.
 
Buenas prácticas para la optimización web
Buenas prácticas para la optimización webBuenas prácticas para la optimización web
Buenas prácticas para la optimización web
 
La magia de Scrum
La magia de ScrumLa magia de Scrum
La magia de Scrum
 
Programador++ por @wottam
Programador++ por @wottamProgramador++ por @wottam
Programador++ por @wottam
 
RaspberryPi: Tu dispositivo para IoT
RaspberryPi: Tu dispositivo para IoTRaspberryPi: Tu dispositivo para IoT
RaspberryPi: Tu dispositivo para IoT
 
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015
 Introducción al Big Data - Xabier Tranche  - VIII Betabeers Bilbao 27/02/2015 Introducción al Big Data - Xabier Tranche  - VIII Betabeers Bilbao 27/02/2015
Introducción al Big Data - Xabier Tranche - VIII Betabeers Bilbao 27/02/2015
 
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
PAYTPV Plataforma Integral de Cobros - VIII Betabeers Bilbao 27/02/2015
 

Último

Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
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 eyvanamcerpam
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
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 ASPECTOSpptxJorgeParada26
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
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.FlorenciaCattelani
 
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 JUNITMaricarmen Sánchez Ruiz
 
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 estossgonzalezp1
 
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.pptxAlan779941
 
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.pptxMiguelAtencio10
 
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...JohnRamos830530
 

Último (11)

Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
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
 
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
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
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.
 
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
 
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
 
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
 
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
 
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...
 

Introducción a Swift

  • 1. Swift: Una introducción • Seguro • Moderno • Potente Sergio González Linares @sergiogl_ Desarrollador iOS y web
  • 2. Algunas características (I) • Nuevo lenguaje de programación para el desarrollo de aplicaciones en iOS y OS X. • Desarrollado a lo largo de 4 años. • Basado en C y Objective-C, sin sus restricciones. • Sintaxis sencilla, similar a otros lenguajes. • Curva de aprendizaje menor que Objective-C. • Gestión de memoria con Reference Automatic Counting (ARC). • Interoperabilidad mix-and-match con el código en Objective-C. • Soporta playgrounds.
  • 3. Algunas características (II) • Los nombres de constantes y variables pueden incluir casi cualquier carácter, incluyendo caracteres Unicode. • Permite anidar comentarios multilínea (/* */). • El punto y coma al final de las sentencias es opcional. • Los paréntesis en las condiciones son opcionales. • Se pueden definir alias para tipos de datos existentes mediante typealias. • Nil no es un puntero a un objeto inexistente. Indica la ausencia de valor.
  • 4.
  • 5. Constantes y variables. Inferencia de tipos var miVariableInt = 10 var miVariableFloat = 10.0 let miConstante = 5 let π = 3.1415927 var miCadena: String var miDoubleExplicito: Double = 10 Constantes: Variables: Especificando tipo: Conversión de tipos: let mensaje = “Su peso es “ let peso = 60 let mensajeCompleto = mensaje + String(peso)
  • 6. Cadenas. Arrays y diccionarios let cervezas = 5 let calimochos = 7 let mensaje = “Me he bebido (cervezas + calimochos) copas. ¡Hip!” Las cadenas (Strings) son ahora un tipo por valor. Se pueden concatenar con + y comparar con ==. Permiten incluir valores y operaciones: Arrays: let arrayVacio = String[]() let arrayInferido = [] var arrayMutable = [“Alfa”, “Bravo”, “Charlie”, “Urdangarín”] arrayMutable[3] = “Delta” Diccionarios: let diccionarioVacio = Dictionary<String, Int>() let diccionarioInferido = [:] var diccionarioMutable = [“Objective-C”: 1980, “Java” : 1995] diccionarioMutable[“Swift”] = 2014
  • 7.
  • 8. Tuplas y opcionales let unPokemon = (25, “Pikachu”) println (“El pokémon número (unPokemon.0) se llama (unPokemon.1)”) ! let (num, nombre) = unPokemon println (“El pokémon número (num) se llama (nombre)”) ! let otroPokemon = (num: 4, nombre: “Charmander”) println (“El pokémon número (otroPokemon.num) se llama (otroPokemon.nombre)”) Las tuplas permiten agrupar dos o más valores, del mismo o de distinto tipo, en un único valor compuesto: Los opcionales son valores que pueden existir… o no: let personajes = [“Gandalf”: “Mago”, “Bilbo”: “Pícaro”, “Thorin”: “Guerrero”] ! let clase: String? = personajes[“Tauriel”] if clase { println(“Tauriel es de clase (clase)”) } else { println(“¿Quién demonios es Tauriel?”) }
  • 9. Funciones (I) func saludar(nombre: String) -> String { return “Ola k ase, “ + nombre } Función que devuelve un valor: func sumar(sumando1: Int, sumando2: Int) -> Int { return sumando1 + sumando2 } Función con varios parámetros: func despedirse() -> String { return “Me las piro vampiro” } Función sin parámetros: func cantar() { println(“Échame una mano, prima, que viene mi novio a verme...”) } Función que no devuelve ningún valor:
  • 10. Funciones (II) func descomponer(valor: Float) -> (parteEntera: Int, parteDecimal: Float) { let parteEntera = Int(valor) let parteDecimal = valor - Float(parteEntera) return (parteEntera, parteDecimal) } ! let (parteEntera, parteDecimal) = descomponer (3.1415927) Función que devuelve múltiples valores: func unirCadena(cadena s1:String, conCadena s2:String) -> String { return s1 + s2 } ! unirCadena (cadena: “Hola ”, conCadena: “caracola”) Función con parámetros con nombres externos: func incrementar(numero: Int, incremento: Int = 1) -> Int { return numero + incremento } Parámetros con valores por defecto:
  • 11.
  • 12. Closures (Clausuras) let saludoConClausura = { println (“Hola, soy una clausura”) } ! saludoConClausura() Una clausura es un bloque autocontenido con una función determinada, que puede usarse en cualquier parte de nuestro código. Es un concepto similar a los bloques de C. func repetir(veces: Int, tarea: () -> ()) { for i in 0..veces { tarea() } } ! repetir (4, saludoConClausura()) repetir (4, { println (“Hola, directamente desde código”) }) repetir (4) { println (“Hola, clausura fuera de los parámetros”) } Las clausuras se pueden utilizar como parámetros en otras funciones:
  • 13. Clases (I) • No es necesario heredar de ninguna superclase. • ¿Archivos de cabecera? ¿Eso qué es? • Las instancias gestionan su memoria automáticamente. No más new, alloc ni init. class Vehículo { var númeroDeRuedas = 0 } class Vehículo { var númeroDeRuedas = 0 var descripción: String { get { return “Este vehículo tiene (númeroDeRuedas) ruedas” } } } Una clase puede incluir propiedades calculadas (computed properties):
  • 14. Clases (II) class Vehículo { var númeroDeRuedas = 4 var descripción: String { return “Este vehículo tiene (númeroDeRuedas) ruedas.” } } Cuando una propiedad calculada es de sólo lectura, nos podemos ahorrar el get: var miCarro = Vehículo() println (miCarro.descripción) Crear una instancia de la clase y acceder a sus propiedades no podría ser más sencillo:
  • 15. Clases (III) class Bicicleta: Vehículo { init() { super.init() númeroDeRuedas = 2 } } ! let miBici = Bicicleta() println (miBici.descripción) Aunque no sea necesario, las clases siguen pudiendo heredar unas de otras. Cuando una clase hereda de una superclase y modifica las propiedades heredadas, es necesario crear un inicializador.
  • 16. Clases (IV) class Coche: Vehículo { ! var velocidad = 0.0 ! init() { super.init() númeroDeRuedas = 4 } ! override var descripción: String { return super.descripción + “, y corre a (velocidad) km/h” } } ! let miCoche = Coche() println (miCoche.descripción) Al igual que las propiedades, también se pueden redefinir los métodos. Para ello se utiliza la palabra override antes de la declaración del método.
  • 17. Clases (V) class CocheDeCani: Coche { ! override var velocidad: Double { willSet { if newValue > 120.0 { velocidad = 0.0 println (“Unos tíos de verde te han puesto una multa, por listo”) } } didSet { if oldValue <= 120.0 { println (“Antes ibas bien, ganso”) } } } } Una de las novedades más importantes son los observadores de propiedades. Estos observadores permiten reaccionar ante los cambios en las propiedades de una instancia:
  • 18. Genéricos struct Pila<T> { ! var elementos = T[]() ! mutating func push(elemento: T) { elementos.append(elemento) } ! mutating func pop() -> T { return elementos.removeLast() } } ! var pilaCadenas = Pila<String>() pilaCadenas.push(“Lolailo”) println (pilaCadenas.pop()) Los genéricos permiten crear una funcionalidad cualquiera, independientemente del tipo de datos que se vayan a manejar con ella.
  • 19. Playgrounds • Los playgrounds son un nuevo tipo de simulador que permite modificar nuestro código y ver inmediatamente los cambios. • Podemos observar de forma gráfica los cambios en el tiempo a través de una línea temporal o timeline. • Los playgrounds permiten: ✓ Enseñar a otros a programar de forma sencilla, pudiendo ver los resultados de lo que hacen en tiempo real. ✓ Diseñar nuevos algoritmos y comprobar sus resultados inmediatamente. ✓ Crear tests y validar su funcionamiento antes de integrarlos en una batería de tests.
  • 20. Recursos • Página oficial:
 https://developer.apple.com/swift/ • Libro gratuito disponible en iBooks. • Videos for Enterprise App Developers:
 https://developer.apple.com/videos/enterprise/ • LearnSwift.tips:
 http://www.learnswift.tips • Learn Swift online:
 http://www.learnswiftonline.com • Swift language highlights: An Objective-C developers perspective:
 http://www.macsfan.com/codes/swift-language-highlights-objective-c- developers-perspective/ • Swift Cheat Sheet:
 http://kpbp.github.io/swiftcheatsheet/ • iOS Blogs Swift tutorials:
 http://ios-blog.co.uk/swift-tutorials/