Análisis

Swift presenta los Preview Package de su librería estándar

Prueba las nuevas funciones de Swift de la forma más sencilla

Resumen del artículo
  • Descubrimos los Preview Package de la librería estándar de Swift. Paquetes en Swift Package Manager para probar desde ya futuras funciones del lenguaje Swift.

Swift es un lenguaje de código abierto, y como tal, tiene un proyecto detrás de evolución del lenguaje en constante propuesta de mejoras del mismo.

El proceso es bien sencillo: cualquier desarrollador propone cambios en los foros oficiales del lenguaje, se debate, y si se ve interesante su propuesta se presenta una propuesta real de cambio que detalle el problema que pretende solucionarse, la solución que se propone, cómo se implementaría y la repercusión que tiene frente a versiones anteriores y demás.

Si todo va adelante, esto da lugar a un código SE (Swift Evolution) seguido de un número que pasa a prueba en Github y donde la gente que descarga y prueba las versiones de desarrollo puede probar que todo es correcto antes de su incorporación al lenguaje.

El problema es que el número de personas que trabajan y prueban en su día a día versiones de desarrollo de Swift son bastante pocas. Por eso Apple ha encontrado una interesante solución basada en el uso de Swift Package Manager (el gestor de paquetes del lenguaje) que abrirá la puerta a mucha más gente a probar nuevas funciones aún no implementadas en la librería estándar del lenguaje sobre la versión de trabajo normal e incluso acotado a un proyecto concreto y no a todo nuestro trabajo con Swift.

Standard Library Preview Package

Uno de los pasos que ha implementado Apple para intentar mejorar la calidad de su software, es hacer condicional la implementación de cambios en sus sistemas. De esta forma, cualquier nuevo cambio que llegue a través de un pull request a sus sistemas, será desactivado por defecto. Solo el equipo implicado en este cambio tendrá la facultad de activarlo y con ello, habrá una mayor estabilidad en las versiones de prueba.

Esta dinámica, en cierta parte, se ha integrado también en Swift. De forma que cuando una función sea aprobada pero aún no se haya incorporado al proyecto de la librería estándar, se creará un paquete en Swift Package Manager, que permitirá instalar y usar este cambio en versiones anteriores del lenguaje y con ello poder probarlo.

Tendremos un único paquete que incorporará todos los cambios como dependencias de este, funciones que aún no se hayan incorporado a la librería estándar pero estén listas para ser probadas. Bastará abrir nuestro fichero Package.swift en nuestro proyecto e incorporar estas dependencias.

let package = Package(
    name: "MyPackage",
    dependencies: [
       .package(url: "https://github.com/apple/swift-standard-library-preview.git", from: "0.0.1"),
    ],
    targets: [
        .target(
            name: "MyTarget",
            dependencies:
            [.product(name: "StandardLibraryPreview", package: "swift-standard-library-preview")]),
    ]
)

Si estamos en un proyecto de Xcode, iremos al proyecto en sí (el elemento de mayor nivel en el navegador del proyecto, y en la parte derecha buscamos «Swift Packages» (usando Xcode 11 o superior). Pulsamos en + y luego ponemos la URL donde está el paquete: https://github.com/apple/swift-standard-library-preview.git.

Luego pulsamos en Next y nos saldrá la pantalla sobre estas líneas con la configuración mínima que podemos comprobar que es la 0.0.1. Pulsamos en Next nuevamente y veremos cómo resuelve las dependencias e instala el paquete correspondiente.

Tras esto, nos preguntará a qué target (o ejecutable) queremos añadirlo. Elegimos el que queramos (si hay más de uno, si no, el que tengamos), pulsamos en Finish y listo.

Podremos comprobar cómo ha incluido el paquete y, adicionalmente como dependencia, los cambios no propagados a la librería estándar que ha incorporado. Cada uno en un paquete diferente. En el momento del lanzamiento de esta funcionalidad es solamente uno.

Como podemos ver, se nos ha incorporado el cambio de evolución de Swift 270, SE-270, que corresponde a los nuevos conjuntos de rangos, un cambio muy interesante.

Probamos los Range Set, SE-270

Vamos a probar rápidamente lo que acabamos de incorporar: el cambio de evolución 270 del lenguaje Swift correspondiente a los conjuntos de rangos.

Básicamente, lo que permite este cambio es usar nuevas formas de manejar las colecciones y extraer o clasificar sus datos. Por ejemplo, incluye una nueva operación de orden más alto en una colección, llamada subranges que nos devuelve un conjunto con todos los índices que correspondan a elementos que cumplan el predicado que indiquemos en el closure que inyectemos.

Para probar este código, lo primero que tenemos que hacer es importar el paquete StandardLibraryPreview.

import StandardLibraryPreview

Ahora nos permitirá usar ese conjunto de índices como forma de acceder a un subconjunto de nuestra colección, accediendo a varios elementos a la vez aunque no sean en orden.

var numbers = [10, 12, -5, 14, -3, -9, 15]
let negatives = numbers.subranges(where: { $0 < 0 })
numbers[negatives].count == 3

En el primer ejemplo, en negatives lo que obtenemos es un tipo Set (un conjunto) con todos los valores únicos de índice de los elementos de la colección numbers que sean menores de 0 (la condición del closure).

Lo bueno de este conjunto, es que podemos usarlo como valor del subscript de la misma colección para obtener un subconjunto de la colección. Hasta ahora, solo podíamos dar rangos consecutivos como 1...5 para acceder a los valores de una sucesión en una colección, pero con esta nueva incorporación, podemos darle un conjunto de índices no ordenados y no consecutivos (y no repetidos) y nos permitirá obtener un subconjunto del array.

numbers.moveSubranges(negatives, to: 0)

También podemos hacer uso del nuevo método moveSubranges, que nos permitirá re-ordenar una colección haciendo que los elementos que forman parte del conjunto de índices se muevan todos a una nueva posición. En el caso del ejemplo, el array de numbers quedaría con los valores así: [-5, -3, -9, 10, 12, 14, 15] ya que todos los valores menores de 0 pasan a la posición 0 del array.

Una forma muy interesante de manejar colecciones, que es aplicable a cualquiera de ellas y que además, al ser un conjunto, permitirá usar las funciones del álgebra de conjuntos como unión, diferencia, diferencia simétrica o intersección.

Un gran añadido al proceso de evolución del lenguaje Swift, sin duda. Y en cuanto a esta nueva función de conjuntos de rangos, esperamos que le saquéis buen provecho y que mejore vuestro Good Apple Coding.

Fuente
Swift Blog
Etiquetas

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.

Artículos relacionados

También en
Cerrar
Botón volver arriba
Cerrar
Cerrar