Cómo crear un módulo en Swift

Swift es un lenguaje de programación para aplicaciones iOS, OS X, watchOS y tvOS que coge lo mejor de C y Objective-C, sin las limitaciones de compatibilidad del propio C. Swift adopta las plantillas de programación seguras y añade modernas características con el objetivo de facilitar la programación. Debido a esto, programar en Swift se convierte en algo agradable y sobre todo, divertido. Es una buena oportunidad, mediante este artículo, aprovechar para ver como funciona Swift.

Desarrollar un framework personalizado que incluya tanto código de ObjC como de Swift es muy sencillo, porque Apple provee de un mecanismo para distribuir código vía frameworks (eventualmente, para iOS también). El próximo paso en el desarrollo es la creación de un módulo en Swift puro, tal y como lo hace Apple con std lib y el puente de Cocoa/Cocoa Touch.

Básicamente, generaremos un modulo simple llamado Logger que contendrá un solo método: Log. Necesitas al menos tres ficheros para crear un módulo de Swift, por lo que debemos obtenerlas todas como salida:

  • Logger.swiftmodule – Interfaz pública / definiciones
  • Logger-swiftdoc – Documentación
  • libLogger.a – Librería (también puede ser un dylib, eso ya depende de tus menesteres)

Podemos empezar creando una librería Logger que no sirva para nada, tal que así:

class Logger
{
     var prefix: String

     init(_ prefix: String)
     {
           self.prefix = prefix;
      }

      func log(object: T)
      {
            print(prefix)
            println(object)
       }
}

La clase solo coge el prefijo y lo imprime antes del objeto actual.

var logger = Logger("> ")
logger.log("Hola Mundo")

Ahora vamos a crear el liblogger.a. El código sería similar a esto

xcrun swift -emit-library -emit-object Logger.swift -sdk $(xcrun --show-sdk-path --sdk macosx) -module-name Logger
ar rcs libLogger.a Logger.o

-emit-library genera dinámicamente un enlace a una librería compartida, mientras que -emit-object genera el archivo del objeto e incluye la función main, por lo que obtendrás errores de enlace debido a los símbolos duplicados. La solución para dicho error es simple, inclúyelos a ambos, -emit-object y -emit-library, como hemos visto en el código anterior.

Vamos ahora con la creación de Logger.swiftdoc y el Logger.swiftmodule:

xcrun swift -emit-module Logger.swift -sdk $(xcrun --show-sdk-path --sdk macosx) -module-name Logger

Ahora que tienes el módulo completo, es hora de integrarlo en un proyecto real. Crea un proyecto simple en Swift y añade los ficheros. Después establece los “Import Paths” para Swift. Ahora ya puedes comprobar si el módulo funciona correctamente en tu proyecto.

import Foundation
import Logger

var logger = Logger("> ")
logger.log("Hola")

Voila!

> Hola

Añadir documentación en Swift es un proceso muy sencillo. Solo tenemos que añadir los caracteres /// para comentar alguna línea de código, o bien para documentar nuestro código. Por ejemplo:

/// Simple Logger
///
/// Se añade un prefijo string al objeto enviado en el constructor
///
class Logger
{
var prefix: String

init(_ prefix: String)
{
self.prefix = prefix;
}

func log(object: T)
{
print(prefix)
println(object)
}
}

Si quieres que funcione después de integrarlo, acuérdate de reiniciar Xcode.

Este enfoque no podría aplicarse en un desarrollador experimentado de iOS / OSX; requiere la creación y el soporte de ficheros Make/CMake, lo que complica el proceso de generación. Sin embargo, puede ser útil si deseas crear un módulo que no incluya nada de código ObjC.

Y este ha sido el artículo en el que trataba cómo crear un módulo en Swift. Ya sabes que si nos quieres proponer un tema que quieres ver reflejado como un tutorial o como una práctica, solo tienes que hacer uso del área de comentarios de un poco más abajo. Por el contrario, si quieres enviarnos tus propios tutoriales, puedes hacerlo a través de la intranet de usuarios que está habilitada para ello, a través del menú Enviar Tutorial. Ya sabes, ayúdanos a crecer con tus conocimientos. ¡Un saludo y feliz código!

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR