No creo ser el único que la tecnología le apasiona y que de vez en cuando nos da agradables sorpresas en modo de renovación y ganar de mejorar. Y eso
es precisamente lo que ha pasado con Swift. Un lenguaje de nueva generación y tremendamente dinámico en su programación.
La primera sensación ha sido compararlo con Python, pero luego me vinieron tanto PHP como Javascript.
Las principales novedades de Swift respecto a Objective C son:
- Los ficheros incluyen código de implementación y definición de manera simultánea, adiós a los ficheros .h y .m ahora tienen extensión
- Variables y Constantes
- Definición de variables con var y de constantes con let.
- Tipado dinámico de variable, no es necesario indicar el tipo de la variable cuando se declara, cuando le asignas un valor cambiará automáticamente al tipo del valor.
- Aun así puedes decidir utilizar los tipos
- let doble: Double=70.0
- Fuera los ; ya no se necesitan
- No se pueden concatenar cadenas y números por ejemplo sin indicar un (Casting). Creo que esto es para mi gusto un fail, en toda regla
- let etiqueta= “texto” + (String) numero
- Conversiones a cadena directa
- let cadena = ” Cadena con (numero) variable”
- Arrays de una manera más rápida con []
- let array = [“uno”,”dos”,”tres”];
- Arrays asociativos del tirón
- let array = [“clave”:”valor”,”clave2″:”valor2″];
- Estructuras de control
- Condiciones sin paréntesis pero llaves obligatorias
- if numero == 50 { println(“es 50!”)}
- Los Switch pueden usar cualquier tipo de dato
- Los for-in se pueden usar con diccionarios
- for(clave,valor) in diccionario{}
- Uso de .. en el for in
- for i in 0..3 {}
- Funciones
- declaradas con la palabra reservada func
- func funcion (){}
- la declaración del tipo que devuelven es con ->
- func funcion () -> String {return “cadena”}
- pueden devolver más de un parámetro
- func funcion () -> (String,String){ return (“uno”,”dos”)}
- el paso de parámetros varía
- func funcion (parametro: String) {}
- Se puede parar parámetros en base a un array
- func funcion (parametros: String…){}
- funcion (“uno”,”dos”)
- Cuando se pasan los parámetros de una función no hace falta indicar el tipo del dato pasados, sólo los valores
- Se pueden anidar funciones, OMG
- Se pueden devolver funciones
- Se pueden pasar funciones como parámetros, adiós a los selectores
- Se pueden pasar bloques de código como parámetros, bienvenidos del mundo JS
- Clases
- las clases se definen con la palabra reservada class
- class MiClase {//atributos y metodos}
- Instanciación de una clase con el constructor con el mismo nombre de la clase
- var objeto = MiClase()
- Acceso a métodos con el .
- objeto.metodo()
- El constructor se sigue llamando init pero no es necesario que devuelva self
- El destructor de la clase es el método deinit
- La herencia va de una manera parecida
- class MiClase:MiPadre{}
- Podemos hacer uso de la palabra reservada override para sobre escribir un método del padre
- Podemos llamar al constructor del padre
- super.init(parametros)
- Podemos definir el getter y el setter de una propiedad directamente después de la definición de la propiedad
- var propiedad: String {get{return propiedad} set{propiedad=newValue}}
- Podemos definir métodos que se ejecuten antes o después de que una propiedad se vaya a establecer (set) con willSet o didSet de manera muy parecida al set de una propiedad
- Los métodos al ser invocados, excepto con el primer valor, deben pasarse los nombres de los parámetro antes que el valor
- objeto.metodo(“valorparametro1”, nombreparametro1: “valorsegundoparametro”)
- Se puede usar la ? cates de acceder a un metodo o instanciación si no se van a pasar todos los parámetros
- Enumeraciones
- Pueden tener asociados métodos
- Se usará la palabra reservada enum para definirlos
- enum: Enumerado: Int {// cases o métodos}
- Protocolos
- Las clases las estructuras y las enumeraciones pueden implementar protocolos
- la palabra reservada mutating permite definir métodos que cambian la estructura, deberá marcarse también la “implementación” de la estructura
- Extensiones
- La palabra reservada extension permite añadir funcionalidades a tipos existentes, similar a los catálogos
- extension Int {//nuevos métodos}
- Generics
- Son funciones o enum que permiten pasar un tipo de dato
- func funcion <Tipo>()