Cotas en Swift
⏱ Dedicación recomendada: 0 minutos
Esto considera el contenido visible y relevante, e ignora texto colapsado o marcado como opcional.
r8vnhill/swift-dibs
En esta sección compararemos cómo Swift maneja las restricciones en tipos genéricos con respecto a Kotlin. Si ya leíste la parte de Kotlin, ya estás familiarizadx con las cotas superiores y cómo Kotlin no soporta cotas inferiores directamente. Ahora veamos qué tanto se puede o no hacer en Swift, y qué mecanismos ofrece este lenguaje.
🧭 Restricciones en Swift: las “constraints”
En Swift, las restricciones en tipos genéricos se declaran con la palabra clave where
, aunque también se pueden definir directamente en la lista de parámetros del genérico, igual que en Kotlin.
🔼 Cota superior en Swift
En Swift, podemos restringir el tipo genérico a una clase o protocolo (interfaz) usando dos formas:
✅ Declaración directa
func printId<T: Entity>(_ value: T) {
print(value.id)
}
Esto equivale a T : Entity
en Kotlin. Aquí T
debe conformar al protocolo Entity
.
✅ Usando where
para múltiples restricciones
func serialize<T>(_ value: T) -> String
where T: Entity, T: Serializable {
return value.serialize()
}
Esto es directamente análogo a where T : Entity, T : Serializable
en Kotlin, y se puede usar tanto en funciones como en tipos.
📊 Resumen comparativo
Aspecto | Swift | Kotlin |
---|---|---|
Cotas superiores (1 restricción) | T: Protocol o T: Clase en la lista de genéricos | T : Interface o T : Clase en la lista de genéricos |
Cotas superiores múltiples | where T: A, T: B | where T : A, T : B |
Cotas inferiores | ❌ No soportadas directamente | ❌ No soportadas directamente |
🎯 Conclusiones
Swift proporciona un sistema poderoso y expresivo para trabajar con restricciones genéricas, particularmente mediante el uso de protocolos y la cláusula where
.
🔑 Puntos clave
- Cotas superiores
- Swift permite imponer restricciones a tipos genéricos utilizando protocolos o clases base.
- Estas restricciones pueden declararse de forma directa (
T: Protocolo
) o conwhere
para múltiples condiciones.
- Comparación con Kotlin
- Ambos lenguajes carecen de soporte nativo para cotas inferiores.
- Kotlin permite declarar varianza, lo que facilita ciertos patrones que en Swift requieren más trabajo manual o indirecto.
🧰 ¿Qué nos llevamos?
Si estás diseñando APIs genéricas en Swift, puedes lograr gran expresividad utilizando cotas superiores y restricciones condicionales. Sin embargo, cuando necesites reutilizar handlers, consumidores u otras entidades con jerarquías complejas, deberás considerar cuidadosamente si tu diseño puede beneficiarse de técnicas como protocolos con associatedtype
o tipos existenciales.
En resumen, Swift ofrece herramientas potentes pero menos directas para expresar ciertas relaciones de tipo. Aprovechar sus fortalezas implica conocer bien el sistema de protocolos y sus limitaciones.
📖 Referencias
🔥 Recomendadas
🌐 Generics. (s. f.). Documentation. Recuperado 22 de marzo de 2025, de https://docs.swift.org/swift-book/documentation/the-swift-programming-language/generics/