Explicación para desarroladores IOS con swift.

Hola muy buenas a todos bienvenidos a otro post más de este maravilloso blog TecnologiasRapida el post de hoy va dedicado a esos desarrolladores de IOS y aficionados/curiosos de la programación de IOS.

Empecemos...


En el año 2008 Apple anunció y lanzó el iPhone SDK 2.0. Éste evento inició otra revolución dentro del desarrollo de software y así nació una nueva generación de desarrolladores, quienes ahora son reconocidos como desarrolladores iOS,muchos de estos desarrolladores nunca antes habían utilizado Objective-C y ese fue el primer reto que Apple tenía para ellos. A pesar de una sintaxis desconocida y un manejo de memoria manual, éste fue inmensamente exitoso, ayudando a poblar la App Store con decenas de miles de aplicaciones.Y después de seis años trabajando y mejorando Objective-C, Apple decidió retar nuevamente a los desarrolladores, cambiando el lenguaje a Swift.

El proposito de este post lo hago para que los desarrolladores de Objective-C para explicar un poco Swift, sus caracteristicas y para que puedas comenzar a usas Swift en tu día día.

Swift vs Obejective-C

Para comenzar a explorar Swift lo que necesitas es descargar XCode 6 de la App Store y crear una zona de juegos para experimentar. Todos los ejemplos que se mencionan en éste artículo fueron hechos de ésta manera.
Página web de Apple Swift es la mejor referencia para aprender sobre programación Swift. Verás que es muy valiosa, y hasta que estés completamente al día con el desarrollo Swift Creo que regresarás aquí a menudo.

Variables y constantes 

 Para declarar una variable en Swift se usa la palabra clave var:
var x = 1
var s = "Hello"
notarás que las dos variables s y x son de diferentes tipos. x es un número entero, mientras que “s” es una cadena de caracteres. Swift es un tipo de lenguaje seguro y deducirá los tipos de variables del valor asignado.
Las constantes son similares pero se declaran usando let en lugar de var. No es necesario saber el valor de una constante al momento de la compilación pero debes asignarle un valor exactamente una vez.
let c1 = 1 // Constante conocida al momento de la compilación

var v = arc4random()

let c2 = v // Constante conocida solo en momento de ejecución
Como su nombre lo indica, son inmutables, por esto el siguiente código causará un error al momento de compilación.
let c = 1
c = 3        // error
Otros tipos también pueden ser declarados como constantes. Por ejemplo, el siguiente código declara una matriz como una constante y, si intentas modificar cualquiera de los elementos, el compilador Swift reportará un error:
var arr2 = [4, 5, 6]
arr2[0] = 8
print (arr2)    // [8, 5, 6]
   
let arr = [1, 2, 3]

a[0] = 5    // error


Opcionales

Los valores opcionales pueden tener un valor o ser nil. Si observas el siguiente código, vas a notar que x fue asignada como valor Opcional de 2014. Esto significa que el compilador Swift sabía que x podría ser nil.
var s = "2014"
var x = s.toInt()

print(x)    // Optional(2014)

Si haces un cambio en éste código y asignas el valor "abc" a s, el cual no se puede convertir a un número entero, vas a notar que x es ahora un nil.
var s = "abc"
var x = s.toInt()

print(x)    // nil

¿El tipo de retorno de la función toInt() es Int?, el cual es un Int opcional. Vamos a tratar de llamar a una función estándar en x:

var x = "2014".toInt()
print(x.successor()) // error
El compilador señala un error, ya que x es un opcional y podría ser potencialmente nil. Debemos probar x primero, y asegurarnos de que la función sucessor sea invocada en un número real, y no en un valor nil:

var x = "2014".toInt()
if x != nil
{
print(x!.successor())    // 2015
}
Ten en cuenta que debemos desenvolver x añadiendo un signo de exclamación (!). Cuando nos aseguramos que x contiene un valor, podemos acceder a él, de lo contrario, obtendremos un error de ejecución. También podemos hacer lo que Swift llama optional binding, convirtiendo así lo opcional a una variable no-opcional

let x = "123".toInt()
if let y = x
{
print(y)
}
El código de la instrucción if solo se ejecutará si x tiene un valor, y es asignada a y. Ten en cuenta que no necesitamos desenvolver y, su tipo no opcional, ya que sabemos que x no es nil.
Revisa el tutorial Swift de Apple donde podrás leer en detalle sobre opcionales e interesantes características como optional chaining

Interpolación de Cadenas

Swift tiene una característica llamada interpolación de Cadenas, más compacta y fácil de leer:

let user = "Gabriel"
let days = 3
let s = "posted by \(user) \(days) ago"
También puedes usar expresiones:

let width = 2
let height = 3

let s = "Area for square with sides \(width) and \(height) is \(width*height)"

Funciones


Las funciones Swift son tipos de primera clase. Esto quiere decir que puedes asignar funciones a las variables, hacerlas pasar como parámetros para las funciones o hacerlas regresar tipos:

func stringLength(s:String) -> Int
{
    return countElements(s)
}

func stringValue(s:String) -> Int
{
    if let x = s.toInt()
    {
        return x
    }
    return 0
}

func doSomething(f:String -> Int, s:String) -> Int
{
    return f(s).successor()
}

let f1 = stringLength
let f2 = stringValue

doSomething(f1, "123")    // 4
doSomething(f2, "123")    // 124

De nuevo, Swift infiere los tipos de f1 and f2 (String -> Int), Aunque los pudimos haber definido explícitamente:

let f1:String -> Int = stringLength

Las funciones también pueden regresar otras funciones:

func compareGreaterThan(a: Int, b: Int) -> Bool
{
    return a > b
}

func compareLessThan(a: Int, b: Int) -> Bool
{
    return a < b
}

func comparator(greaterThan:Bool) -> (Int, Int) -> Bool
{
    if greaterThan
    {
        return compareGreaterThan
    }
    else
    {
        return compareLessThan
    }
}

let f = comparator(true)

println(f(5, 9))

Enumeraciones

A diferencia de Objective-C, las enumeraciones Swift pueden asignar cadenas, caracteres o flotantes como valores para cada miembro, aparte de números enteros. El método conveniente toRaw() regresa el valor asignado a cada miembro, las enumeraciones también se pueden parametrizar

enum Location
{
    case Address(street:String, city:String)
    case LatLon(lat:Float, lon:Float)
    
    func description() -> String
    {
        switch self
        {
        case let .Address(street, city):
            return street + ", " + city
        case let .LatLon(lat, lon):
            return "(\(lat), \(lon))"
        }
    }
}

let loc1 = Location.Address(street: "2070 Fell St", city: "San Francisco")
let loc2 = Location.LatLon(lat: 23.117, lon: 45.899)
print(loc1.description())        // "2070 Fell St, San Francisco"
print(loc2.description())        // "(23.117, 45.988)"

Tuplas

Los valores dentro de una tupla pueden ser de cualquier tipo y no tiene que ser del mismo tipo entre ellos.

let person = ("Gabriel", "Kirkpatrick")
print(person.0) // Gabriel

También puedes darle nombre a los elementos de tuplas individuales:

let person = (first: "Gabriel", last: "Kirkpatrick")
print(person.first)

Las tuplas son extremadamente convenientes como tipos de regreso para funciones que necesitan regresar más de un valor:

func intDivision(a: Int, b: Int) -> (quotient: Int, remainder: Int)
{
    return (a/b, a%b)
}
print(intDivision(11, 3))    // (3, 2)
let result = intDivision(15, 4)
print(result.remainder)    // 3
A diferencia de Objective-C, Swift apoya la búsqueda de patrones en case statement o switch case:

let complex = (2.0, 1.1)    // real and imaginary parts

switch complex
{
    case (0, 0):
        println("Number is zero")
    case (_, 0):
        println("Number is real")
    default:
        println("Number is imaginary")
}

En el segundo caso, no nos importa la verdadera parte del número así que usamos un _ para que coincida con cualquier cosa.


Espero que les halla gustado y lo disfruten y sobretodo que les halla servido de ayuda, y por ultimo quiero darle las gracias a la gente de toptal por patrocinar este artículo y por confiar en mi para que les pueda traer mas contenido.



Si les ha gustado compartanlo denle a seguir y dejen sus comentarios ya que nos ayudan a crecer más y saber si lo hacemos bien o no. Hasta Luegoo people...

Twitter: @tecnologiasrapi

Instagram:rubenvrodriguez

Enlace al blog de Toptal: https://www.toptal.com/developers/blog

Facebook: Tecnologiasrapida.

Contacto en: rubenvargasrodriguez4@gmail.com



Comentarios

Entradas populares