Skip to main content

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

AspectoSwiftKotlin
Cotas superiores (1 restricción)T: Protocol o T: Clase en la lista de genéricosT : Interface o T : Clase en la lista de genéricos
Cotas superiores múltipleswhere T: A, T: Bwhere 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

  1. 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 con where para múltiples condiciones.
  2. 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/