Home » Guías » Swift en Linux, guía de entorno y trabajo
Linux Swift Trabajo

Swift en Linux, guía de entorno y trabajo

Nueva guía sobre desarrollo de Swift en Linux, en esta ocasión para entender cómo funciona el lenguaje en este sistema operativo. Si no leísteis en su momento la guía de instalación, podéis leerla aquí pues será el punto de partida de esta guía.

¿Qué es Swift Open Source?

Lo primero que tenemos que entender es que Swift en su versión de código abierto es el lenguaje, pero prescinde de partes que en muchas ocasiones pensamos que forman parten de este aunque no sea así, como lógicamente, toda la parte que compone Cocoa. Esto quiere decir que no hay AppKit, ni UIKit, ni Core Animation, ni Core Data, ni AVFoundation… nada de esto está presente: insistimos, solo el lenguaje en sí.

De igual forma, estamos acostumbrados a que la forma en que se organiza un programa con Swift es a partir de un proyecto de Xcode (de extensión xcodeproj) que a su vez es una carpeta que dentro contiene toda la metainformación necesaria para la configuración de un proyecto y las rutas hacia todos los archivos que componen el mismo y han de ser recopilados cada que se ejecuta una construcción (build) para luego ejecutarlo contra el sistema (si es una app para OS X), el simulador de iOS o un dispositivo conectado a la máquina.

Obviamente, Swift Open Source no funciona de esta forma y crea su propia organización, la cual sirve por igual si trabajamos en OS X o en Linux. En este caso tenemos dos conceptos importantes que aprender: el de paquete o package y módulo o module. El primero es un código fuente que engloba varios ficheros y que a su vez puede incorporar dependencias.Y estas son lo segundo: los módulos. Un módulo es cualquier paquete que ya se haya creado (en código fuente) y que queramos incorporar mediante la instrucción import y la inclusión de sus dependencias dentro de un nuevo paquete.

Configurando nuestro primer proyecto

Para crear un proyecto, tenemos que tener varios conceptos claros. El primero es que hay que crear una carpeta que lo contenga y donde estén todos los ficheros de su estructura. Así que desde el terminal creamos una nueva carpeta en nuestro Home o donde nos parezca mejor.

Hecho y accedido, el fichero principal que vamos a manejar se llama Package.swift, donde estará toda la estructura de nuestro programa. Cualquier proyecto en Swift, además, da por entendido que usamos una carpeta Sources y dentro de esta buscará todos los ficheros .swift que tengamos. De hecho, el contenido de cualquier fichero que haya en esa carpeta será accesible por el resto, por lo que si tenemos una clase, una función o incluso una variable o propiedad en cualquiera de los ficheros en esta ruta, actuará como si tuviera el control de acceso internal (todo los ficheros de código del mismo proyecto tienen acceso).

Pero esta carpeta hay que crearla, por lo que como vimos en el ejemplo anterior, ya nos encargamos de esto con mkdir Sources.

Ahora creamos el fichero principal usando la instrucción touch que nos permite crear un fichero vacío en el sistema.

Este fichero es lo que se conoce como el fichero de manifiesto o manifest, y puede estar vacío si vamos a usar las funciones por defecto de creación de paquetes, que serían estas:

Pero insistimos, no es necesario crear este contenido si vamos a usar las opciones por defecto, que básicamente es tener la carpeta Sources y dentro de ella poner el código de nuestro programa. Si queremos incluir las dependencias de algún módulo que queramos incluir, entonces será cuando tengamos que crear el fichero con su contenido correspondiente.

Así que vamos a la carpeta Sources y creamos el siguiente fichero imprescindible para que nuestro paquete/programa se cree: el fichero main.swift. En este, podemos el código que dará función a nuestro programa y será tratado como inicio del mismo. Vamos a ver un ejemplo con algo “tan complejo” como un saludo.

Ya tenemos con esto nuestro primer proyecto en Swift creado. Ahora solo queda crear el mismo y para ello usamos algo parecido a como lo haríamos en otros lenguajes como C++, ejecutando el comando swift build en la raíz del proyecto. Así que, estando en la carpeta PrimerProyecto, escribimos en el terminal:

Al hacerlo, veremos dos sencillos mensajes:

Si miramos la carpeta, parece que no hay nada a la vista, pero tras esta ejecución el sistema ha creado una carpeta .build donde ha guardado el resultado de nuestra compilación y donde, dentro de la carpeta debug, tenemos el ejecutable que nos mostrará el mensaje. Desde la carpeta donde hemos ejecutado el proyecto, podemos lanzar el programa resultante de nuestro trabajo con .build/debug/PrimerProyecto.

No obstante, tenemos una forma más fácil de ejecutar el fichero, directamente invocando swift con el nombre del fichero. Esto lo ejecutará como tal, y es otra forma que tenemos de ver y probar.

Usando varios ficheros

Vamos a ver cómo los ficheros fuentes en nuestro paquete se integran como si fuera un solo fichero. Para ello vamos a la carpeta Sources y creamos un nuevo fichero llamado util.swift donde pondremos el siguiente código que nos permitirá sumar dos números a través de una función y devolver una cadena que nos informe del resultado:

Tras esto, editamos el fichero main.swift y lo dejamos con el siguiente código, incorporando la llamada a la función que acabamos de crear sumar.

Hecho esto, volvemos al raíz del proyecto y construimos con swift build. En este caso veremos que el mensaje ha variado:

Como vemos, ha localizado los ficheros, main.swift y util.swift y ha compilado ambos. Y la llamada de sumar que está en el segundo ha sido accesible y entendible por el primer fichero, ya que como hemos dicho antes, el acceso es siempre de tipo internal como si se tratara de un proyecto Xcode convencional.

Ahora, si ejecutamos el programa resultante veremos la nueva incorporación.

Parámetros y módulos

Otra cosa interesante que podemos hacer es usar los parámetros de entrada de la llamada a nuestro programa para conseguir comportamientos diferentes. En este caso, es tan simple como acceder a una clase de sistema llamada Process que a su vez tiene un array como propiedad llamado arguments. Cada posición de dicho array es cada uno de los argumentos que pongamos en la línea de comandos al llamar a nuestro programa, por lo que si modificamos el fichero main.swift de esta forma, obtendremos una nueva funcionalidad.

Obviamente, tenemos que entender que la posición 0 del array corresponde a la llamada en sí al programa, por lo que el primer argumento que pongamos estará en la posición 1 y en total hemos de contar un parámetro de más. Volvemos a generar el compilado con swift build desde la raíz del proyecto y ahora llamamos proporcionando dos argumentos numéricos:

Cuando creamos un paquete que no tiene un fichero main.swift se entiende que este es un módulo y no un paquete que genera un ejecutable, porque no tiene un punto de inicio. Por lo tanto, lo que obtendríamos es una librería estática de extensión .a que podríamos incorporar a cualquier otro paquete, pero eso lo veremos en otras guías.

Comenzando a trabajar

Ahora ya podemos empezar a trabajar con Swift Open Source en Linux, aunque hemos de decir que esta guía, como tal, también nos serviría para usarla en Swift Open Source si lo usamos desde OS X. No obstante, todos los pasos han sido creados desde Linux con la misma instalación que ya vimos en la anterior guía.

Aprovechad esta guía, probad, cread vuestros propios paquetes y contadnos vuestra experiencia. Hasta la próxima y Good Apple Coding.

Acerca de Julio César Fernández

Analista, consultor y periodista tecnológico, desarrollador, empresario, productor audiovisual, actor de doblaje e ingeniero de vídeo y audio.

Otras recomendaciones

JSON Swift 3

Trabajando con JSON en Swift 3

JSON es uno de los estándares de trabajo de datos en formato ligero más usados en internet y programación. Aprende a usar la clase JSONSerialization que nos permite trabajar con ellos de forma nativa en Swift 3 y a leerlos desde tu proyecto, grabarlos en disco o cargarlos y serializarlos desde internet con nuestra guía.

  • Alexis Barba

    Me he quitado el adblock en su sitio por el excelente contenido. Yo que voy empezando en Swift me es de muchisima utilidad. Muchisimas gracias y seguir asi.

  • Plandevida

    Hola,

    Siguiendo el tutorial si compilo main.swift con sumar(5,b:6) me da error “el parametro a no está definido”, lo pongo así sumar(a:5,b:6) compila pero salnza el error de que la función sumar no está definida. Tengo ambos ficheros main.swift y util.swift en Sources y con el contenido de los del tutorial.

    Un saludo.