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>()

Licencia Creative Commons