Quantcast
Channel: RIActive » iOS
Viewing all articles
Browse latest Browse all 3

Como empezar a programar en SWIFT

$
0
0

Apple ha creado un nuevo lenguaje de programación, el cual durante su creación y según los rumores, estuvo en proceso de desarrollo cerca de 4 años, seguramente Jobs alcanzó a poner su magia allí. Swift fue lanzado en el WWDC 2014 y ya que hemos estado practicando con este nuevo lenguaje debo decir que facilita muchísimo la vida de todo developer existente de iOS y la curva de aprendizaje para los nuevos en la plataforma es increíblemente corta.

Swift logo

En este post haremos un “Hola Mundo” integrando el lenguaje con los componentes gráficos. Hay muchas cosas interesantes en Swift como el playground, aunque ahora nos enfocaremos en algunos conceptos de la nueva sintaxis, UI y como crear el proyecto en Xcode 6.

Este post esta pensando principalmente para todos aquellos developers que quieran iniciar en el mundo de iOS para el cual usaremos Swift, NO es necesario saber Objective-C para poder realizar este ejercicio y mucho menos para comenzar a desarrollar tu App para iPhone o iPad.

Para comenzar es necesario contar con lo siguiente:

  1. Una mac con Mavericks, no es necesario tener Yosemite instalado
  2. Cuenta de iOS Developer Program para poder descargar Xcode 6 aunque si googleas adecuadamente encontraras mas opciones 😛
  3. Si es posible un dispositivo con iOS 8 instalado, si no con el simulador que viene en Xcode 6 es suficiente
  4. Un par de tazas de cafe, tus audífonos, música cool para programar del Music Inspector 😀

Después de instalar Xcode 6 lo abrimos y en la primer pantalla seleccionemos la opción “Create a new Xcode project”, en caso de que no te aparezca el Splash Screen ve al menú File->New->Project o en su defecto el juego de teclas shift+command+N.

Creando un Proyecto nuevo en Xcode 6
Creando un Proyecto nuevo en Xcode 6

En la siguiente pantalla busquemos la opción iOS->Application->Single View Application y pulsamos el botón next.

Elegimos la opción de Single View Application
Elegimos la opción de Single View Application

Llenamos las opciones de Product Name, Organization Name y Organization Identifier. En la opción de Language seleccionamos Swift y en Devices para este caso dejamos la opción Universal. Las otras opciones es si deseas que tu aplicación sea especifica de iPhone o iPad. La opción de Core Data la dejamos sin seleccionar. En la siguiente imagen veras como queda al final.

Opciones del proyecto
Opciones del proyecto

En el siguiente paso elegimos la carpeta donde deseamos guardar nuestra aplicación. La opción de “Create Git repository” podemos dejarla sin seleccionar por ahora. En otro post explicaremos como integrar Git con Xcode.

Una vez creado el proyecto veremos la estructura del lado izquierdo en el explorador. Los que ya han trabajado con Objective-C verán la diferencia de los archivos, ya no existen los archivos con extensión .h ni .m solo están los archivos con extensión .swift.

Diferencias entre Swift y Objective-C
Diferencias entre Swift y Objective-C

Los archivos que nos interesan principalmente son:

  • AppDelegate.swift: La función primaria de esta clase es la de manejar las transiciones de estado dentro de la aplicación y notificar de estos cambios y así detectar cuando se entra, sale, o se va a segundo plano la aplicación entre otros eventos.Una de las principales funciones del AppDelegate es la de crear el ViewController una vez que ha detectado el evento de que la aplicación a sido lanzada.
  • ViewController.swift: Este objeto administra la presentación del contenido de tu aplicación en pantalla, gestiona una sola vista que a su vez puede tener una o varias subvistas. Cuando la vista va a ser presentada, este controlador la hace visible al insertarla en una ventana de la aplicación.En este archivo es donde se establece el comportamiento (métodos o funciones) que harán que la vista definida en el Main.storyboard funcione. De igual forma se establecen los métodos o funciones para agregar o extraer datos del modelo gestionando así la relación entre la vista y el modelo.
  • Main.storyboard: Este archivo contiene la colección de vistas que serán presentadas en la aplicación por el ViewController, por tanto contiene todos los componentes de la interfaz de usuario como botones, sliders, etiquetas, campos de texto, etc. Dependiendo de como crees tu proyecto puede o no existir este archivo y tendrás que crear y gestionar los componentes gráficos de tu app directamente en código. Ojo! Cuando creas un prototipo o cuando estas aprendiendo, como este caso, los storyboard son muy funcionales, pero ya para una aplicación que mandaras a la tienda no son tan recomendables. Acá un artículo detallando mas sobre el tema por  Fernando Rodriguez instructor iOS en Big Nerd RanchCuando tenemos este storyboard es posible trabajar con el Interface Builder con el cual tendremos una representación visual de los componentes y su distribución en la vista.

Puedes encontrar más información sobre estos archivos en la documentación oficial de Apple Developer

En las demás carpetas encontraremos los archivos para realizar pruebas unitarias y los binarios del proyecto.

Los archivos con los que trabajaremos principalmente en este ejemplo son ViewController.swift y Main.storyboard. Para poder tener ambos archivos en la misma pantalla y sacar mayor provecho del IDE abramos primero el archivo Main.storyboard y posteriormente localicemos en la parte superior derecha un icono representando un traje con moño (Assistant Editor) y busquemos ocultar las ventanas que no usaremos. Como ejemplo tu pantalla deberá quedar de la siguiente manera.

Assistant Editor
Assistant Editor

Nuestra pantalla deberá quedar de la siguiente forma, ocultamos el Project Navigator pulsando command + 0,del lado izquierdo nuestra vista queda el Interface Builder y del lado derecho el archivo ViewController.swift y a continuación queda la vista Utilities

Vistas ordenadas en Xcode 6
Vistas ordenadas en Xcode 6

Una vez configuradas nuestras ventanas, establezcamos el layout de un iPhone, para esto ubiquemos vayamos al Interface Builder y seleccionemos el primer icono llamado ViewController, una vez seleccionado ubiquemos en el panel del lado derecho el Attributes Inspector y en la sección de Simulated Metrics seleccionemos en el apartado Size la opción iPhone 4-inch y del apartado Orientation la opción Portrait.

Opciones de layout y propiedades
Opciones de layout y propiedades

Ya con el layout establecido pasemos a agregar los componentes gráficos de nuestra app. Ubiquemos el panel Object Library en la parte inferior derecha de nuestra pantalla. De esta necesitaremos por ahora dos componentes, Label y Button, al ubicarlos habrá que arrastrarlos hasta el Interface Builder y allí ordenarlos. Los textos de cada componente podemos modificarlos al dar doble click sobre cada uno. Las propiedades gráficas de cada uno como color de fondo, color y tamaño de textos y demás se pueden editar al dar un click en cada uno y ubicar la propiedad deseada en el panel de Attributes Inspector en la parte izquierda de tu pantalla. Los colores y tamaños son a tu gusto ;).

Opciones de objetos y propiedades
Opciones de objetos y propiedades

Tu layout ya con los componentes debe quedar de la siguiente forma.

Nuestro layout ya organizado
Nuestro layout ya organizado

La idea es que logremos hacer que, al pulsar el boton con la leyenda “Saludar”, se muestre en la etiqueta el texto “Hola Mundo”. Para esto trabajaremos  ya con el ViewController donde estaremos trabajando con 2 propiedades @IBAction y @IBOutlet,  que son las propiedades que nos servirán de puente para detonar acciones en el controlador(@IBAction) y recibir o enviar  los datos que se muestran o reciben en pantalla (@IBOutlet).

Escribamos el primer método haciendo click sobre el botón con la leyenda saludar, sin soltar el botón del mouse pulsemos la tecla control (ctrl) y arrastremos el botón hacía el viewController justo debajo del método didReceiveMemoryWarning. Cuando comenzamos el proceso de arrastrado el botón se mantendrá en su lugar y se mostrará una línea para indicar que se esta relacionando el botón con un método.

Relacionando la vista con el controlador con Action
Relacionando la vista con el controlador con Action

Una vez que terminado el proceso de arrastrado o dragging, se desplegará una ventana de opciones donde deberemos seleccionar los siguientes valores:

  • Connection: Seleccionar la opción action,  pues el tipo de conexión que detonará es una acción del usuario sobre el componente.
  • Name: El nombre que llevará el método, en este caso escribamos saludar.
  • Type: Seleccionemos para este caso la opción UIButton pues es este quien detonará una acción y en caso de recibir parámetros se puede relacionar a este tipo de dato.
  • Event: Dejamos el valor por default “Touch Up Inside”. De cualquier forma si deseamos que sea otro tipo de evento el que detone esta función podemos elegir cualquiera de las opciones desplegadas en la lista. Los eventos mostrados son los relacionados al tipo de objeto, por lo que pueden variar según su función.
  • Arguments: Son los parámetros que recibirá el método. Para este caso no se estará recibiendo ninguno por lo que seleccionamos la opción none.
Valores y opciones de la relación
Valores y opciones de la relación

No es necesario que hagamos siempre este proceso para crear y relacionar los métodos con los componentes gráficos. Ya sea que necesitemos agregar una nueva relación, modificar una ya existente o hacer que de un evento se detonen uno o más métodos, lo que tenemos que hacer es dar click derecho sobre el componente y se desplegará una lista de todas las opciones disponibles para el objeto. Para eliminar una relación deberemos pulsar el símbolo de X que esta sobre el nombre de la relación y para agregar una nueva relación existente o crear una deberemos hacer un click sobre el circulo a la derecha de cada opción deseada y hacer el proceso de arrastre y demás acciones explicadas anteriormente. Recordemos que podemos escribir todas las funciones y variables necesarias y al finalizar realizar las relaciones necesarias.

Editando la relación
Editando la relación

Cuando terminamos de hacer la relación aparecerá el método escrito y desde allí podremos escribir las acciones a ejecutar en la función. Antes de escribir dichas acciones establezcamos la relación para la etiqueta.

Relacionando un Outlet
Relacionando un Outlet

Esta relación tendrá una conexión de tipo Outlet y de nombre saludo. 

Opciones del Outlet
Opciones del Outlet

Ahora en nuestro ViewController el código se verá de la siguiente forma

@IBAction func saludar() {

 }

@IBOutlet var saludo: UILabel

Lo que sigue es sumamente sencillo, en el método que acabamos de crear, saludar(), indicaremos a la etiqueta relacionada con la variable saludo que tenga un valor y dado que es de tipo @IBOutlet automáticamente se mostrará el valor nuevo en pantalla. La variable saludo al ser de tipo UILabel tiene una propiedad text que es a donde asignaremos la cadena texto “Hola Mundo!”. Nuestro código quedará de la siguiente forma:

@IBAction func saludar() {
     saludo.text = "Hola Mundo!"
 }

@IBOutlet var saludo: UILabel

Ya con este código podemos compilar y probar la aplicación ya sea en nuestro dispositivo con iOS8 o en el simulador. Al probar nuestra app y pulsar en el botón con la leyenda saludar se modificará el valor de la etiqueta mostrando ahora la cadena de texto “Hola Mundo!”.

Probando nuestra app
Probando nuestra app

Ahora pongamos una funcionalidad extra para recibir datos desde un campo de texto, procesarlo en el ViewController y modificar la etiqueta con el nuevo texto.

Desde la librería de objetos busquemos un text field y un label y habrá que arrastrarlos al Interface Builder, reorganicemos los componentes de nuestro layout para que quede de la siguiente forma

Nuestro layout modificado
Nuestro layout modificado

Ahora hagamos una relación del text field con una conexión de tipo Outlet pues solo recibiremos el valor de este objeto mas no se reaccionará ante un evento de este. En la opción name pongamos nombre, que valga la redundancia, será el nombre de dicha variable.

Relacionando el text field con un outlet
Relacionando el text field con un outlet

Ahora tendremos una nueva variable, y para mostrar como quedaría un método sin relación con la vista así como la forma de invocar métodos, agregaremos una función llamada armaSaludo() la cual se encargará de concatenar el valor estático de “Hola ” y concatenarlo con el contenido variable de la propiedad text del objeto nombre de tipo UITextField o en palabras más comunes concatenar con lo que sea que se escriba en el campo de texto.  Nuestro código ya modificado quedará de la siguiente forma

 @IBAction func saludar() {
     armaSaludo()
 }

 func armaSaludo()
 {
     saludo.text = "Hola " + nombre.text + "!!!"
 }

 @IBOutlet var saludo: UILabel

 @IBOutlet var nombre: UITextField

Pueden notar como la función que no está relacionada con la vista no hay nada que anteceda a la palabra reservada func. El flujo de nuestra app queda entonces de la siguiente forma:

  • Escribimos un nombre en el campo de texto
  • Pulsamos el botón con la leyenda “Saludar”
  • Una vez pulsado el botón se invoca la función saludar() la cual a su vez invoca a la función armaSaludo(). Claro que pudimos brincarnos este paso, pero el objetivo era ver los métodos no relacionados a la vista y como es que se invocan métodos desde el ViewController
  • Al ser detonada la función armaSaludo() se concatenan el valor estático “Hola ” con el valor dinámico contenido en nombre.text y se asigna el nuevo valor generado a la variable saludo que esta ligada a un label en la vista.
  • La variable saludo al ser de tipo Outlet automáticamente notifica a la vista para mostrar el valor que tenga actualmente.

En los tipos de variables  observamos que tanto los Action como los Outlet tienen el prefijo @IB  el cual significa Interface Builder indicando así, ya sea para el Action o Outlet  que están relacionados con la vista generada en el  Interface Builder.

Probemos ahora nuestra aplicación y veamos el resultado.

Nuestra app finalizada
Nuestra app finalizada

Como ven, Swift es un lenguaje de programación que nos facilita muchísimo la tarea de desarrollar apps para iOS, creo que esto será un parteaguas interesante en el mundo de desarrollo móvil.

Les dejo está galeria de la aplicación corriendo en un iPad Mini con iOS8, solo modifique un poco el acomodo de los componentes en el layout para que se vieran mejor 😉  de allí en fuera todo es idéntico!

Haga click para ver el pase de diapositivas.

El código completo de este código puedes encontrarlo en nuestro repositorio de GitHub en https://github.com/riactive/RIActive-Swift-HelloWorld/ para que que puedas hacer un fork, modificar y probar a tu gusto.

En el siguiente listado encontrarás algunos recursos que te serán interesantes para aprender más sobre Swift y gratis 😛

Hay otro link bastante ilustrativo de Video2Brain que, aunque no es gratuito, pero vale mucho la pena https://www.video2brain.com/mx/cursos/introduccion-a-swift

Espero que este tutorial les sea de mucha utilidad y que puedan empezar en este fabuloso camino de desarrollo de apps móviles. El 26 de septiembre estaremos impartiendo un BootCamp de Swift y tenemos un lugar para regalar en la comunidad! Así que pendientes de la dinámica que estaremos publicando para que puedas asistir.

Cualquier duda o comentario no duden en postearlo por esta vía o en nuestras redes sociales 😉

Saludos y Happy Coding!!!
Sergio Brito – @yacaFx

 


Viewing all articles
Browse latest Browse all 3

Trending Articles