Biblioteca Estándar de Swift (iOS/macOS): revisión completa
La biblioteca estándar de Swift es un conjunto fundamental de tipos, protocolos y funciones integrados directamente en el lenguaje. Proporciona la funcionalidad básica necesaria para el desarrollo en iOS, macOS, watchOS y tvOS. A diferencia de los frameworks Foundation o UIKit, que son parte del SDK, la biblioteca estándar de Swift está disponible de inmediato sin importaciones adicionales. En este artículo, analizaremos en detalle sus componentes clave, estructuras de datos, protocolos y mecanismos de gestión de memoria.
Tipos de datos y colecciones principales
Swift proporciona colecciones potentes y type-safe, optimizadas para el rendimiento.
Arrays (Array)
Colección ordenada de elementos del mismo tipo. Admite acceso aleatorio y cambio de tamaño dinámico.
var numbers: [Int] = [1, 2, 3]numbers.append(4)let first = numbers[0] // 1numbers.sort()Sets (Set)
Colección no ordenada de elementos únicos. Ideal para verificar pertenencia y operaciones matemáticas.
let setA: Set<Int> = [1, 2, 3, 4]let setB: Set<Int> = [3, 4, 5, 6]let intersection = setA.intersection(setB) // {3, 4}let union = setA.union(setB) // {1, 2, 3, 4, 5, 6}Diccionarios (Dictionary)
Colección no ordenada de pares clave-valor. Las claves deben ser hashables (Hashable).
var capitals: [String: String] = ["Rusia": "Moscú", "EE. UU.": "Washington"]capitals["Alemania"] = "Berlín"if let russiaCapital = capitals["Rusia"] { print(russiaCapital) // Moscú}Protocolos: la base de la versatilidad de Swift
La biblioteca estándar de Swift está construida sobre protocolos que definen una interfaz común para diferentes tipos.
- Equatable — permite comparar instancias con
==. - Hashable — requerido para usar el tipo como clave de diccionario o elemento de set.
- Comparable — permite ordenar objetos (<, >, <=, >=).
- Codable — combina Encodable y Decodable para serialización en JSON, Property List y otros formatos.
- CaseIterable — proporciona automáticamente una colección de todos los valores de una enumeración.
Ejemplo de uso de Codable
struct User: Codable { let id: Int let name: String let isActive: Bool}
let json = """{ "id": 42, "name": "Iván", "isActive": true}""".data(using: .utf8)!
let decoder = JSONDecoder()if let user = try? decoder.decode(User.self, from: json) { print(user.name) // Iván}Gestión de memoria: ARC y Copy-on-Write
Swift utiliza Automatic Reference Counting (ARC) para gestionar la memoria de tipos por referencia (clases). Para estructuras y enumeraciones se aplica la semántica de copia de valor, pero con la optimización Copy-on-Write (COW) para colecciones.
var array1 = [1, 2, 3]var array2 = array1 // Mientras no modifiquemos — datos compartidosarray2.append(4) // Aquí ocurre la copia real (COW)print(array1.count) // 3 — el array original no ha cambiadoGenéricos (Generics)
Los genéricos permiten escribir funciones y tipos flexibles y reutilizables sin pérdida de rendimiento.
func swapTwoValues<T>(_ a: inout T, _ b: inout T) { let temporaryA = a a = b b = temporaryA}
var x = 10var y = 20swapTwoValues(&x, &y) // x = 20, y = 10Tipos opcionales (Optionals)
El manejo seguro de valores ausentes es una de las características clave de Swift. Los opcionales previenen excepciones de null-pointer.
var optionalString: String? = "Hola"// Optional bindingif let unwrapped = optional