Restricciones de parámetros de tipo
Exija conformidad en los parámetros genéricos.
Restricciones de parámetros de tipo es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.
Resumen de genéricos
Una función genérica utiliza un parámetro de tipo como <T> para funcionar con muchos tipos. Sin embargo, un T sin restricciones solo se puede pasar de un sitio a otro, no inspeccionar. Las restricciones desbloquean capacidades.
func identity<T>(_ x: T) -> T { x }
print(identity(5))
print(identity("hi"))La restricción Comparable
Escribir <T: Comparable> garantiza que los valores de T admiten <, > y operadores relacionados, por lo que puede compararlos.
func largest<T: Comparable>(_ a: T, _ b: T) -> T {
a > b ? a : b
}
print(largest(3, 9))
print(largest("apple", "pear"))Por qué se necesitan restricciones
Sin Comparable, el compilador rechaza a > b porque no todos los tipos lo admiten. La restricción es la promesa que hace que la operación sea válida.
func minOf<T: Comparable>(_ list: [T]) -> T? {
list.min()
}
print(minOf([4, 2, 8])!)La restricción Equatable
Equatable habilita == y !=. Utilícela para contar o encontrar elementos coincidentes.
func count<T: Equatable>(_ x: T, in list: [T]) -> Int {
list.filter { $0 == x }.count
}
print(count(2, in: [2, 3, 2, 2]))La restricción Hashable
Hashable permite utilizar valores como elementos de un Set o como claves de un diccionario.
func unique<T: Hashable>(_ list: [T]) -> [T] {
Array(Set(list))
}
print(unique([1, 1, 2, 3, 3]).sorted())Restricciones de protocolos
Cualquier protocolo puede utilizarse como restricción. En este caso, un protocolo personalizado habilita su método en el parámetro genérico.
protocol Speaker { func speak() -> String }
struct Dog: Speaker { func speak() -> String { "Woof" } }
func announce<T: Speaker>(_ x: T) {
print(x.speak())
}
announce(Dog())Restricciones de clase
Puede exigir que T herede de una clase concreta para acceder a los miembros de dicha clase.
class Animal { func name() -> String { "animal" } }
class Cat: Animal { override func name() -> String { "cat" } }
func describe<T: Animal>(_ x: T) { print(x.name()) }
describe(Cat())Varias restricciones
Combine restricciones con & para exigir varios protocolos a la vez.
func show<T: CustomStringConvertible & Equatable>(_ a: T, _ b: T) {
print(a.description, a == b)
}
show(5, 5)Varios parámetros de tipo
Una función puede tener varios parámetros restringidos, cada uno con sus propios requisitos.
func zipMap<K: Hashable, V>(_ keys: [K], _ vals: [V]) -> [K: V] {
var d: [K: V] = [:]
for (k, v) in zip(keys, vals) { d[k] = v }
return d
}
print(zipMap(["a", "b"], [1, 2]))Restricciones en tipos
Los tipos genéricos, no solo las funciones, también aceptan restricciones. Una estructura genérica puede exigir que su parámetro conforme con un protocolo.
struct SortedBox<T: Comparable> {
var items: [T]
var smallest: T? { items.min() }
}
print(SortedBox(items: [5, 1, 9]).smallest!)Restricciones numéricas
Los protocolos estándar como Numeric permiten que el código genérico realice operaciones aritméticas con Int, Double y otros tipos.
func sum<T: Numeric>(_ list: [T]) -> T {
list.reduce(0, +)
}
print(sum([1, 2, 3]))
print(sum([1.5, 2.5]))Comprobación rápida
Compruebe su comprensión de las restricciones de los parámetros de tipo.
Resumen
Las restricciones de los parámetros de tipo (<T: Protocol> o <T: SomeClass>) indican al compilador qué puede hacer un tipo genérico. Ha visto Comparable, Equatable, Hashable, Numeric, protocolos personalizados, restricciones de clase, varias restricciones con & y restricciones en tipos genéricos.
Preguntas frecuentes
¿La lección «Restricciones de parámetros de tipo» es gratis?
Sí — el texto completo de «Restricciones de parámetros de tipo» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Restricciones de parámetros de tipo»?
Exija conformidad en los parámetros genéricos. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Swift Academy?
No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «Restricciones de parámetros de tipo»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Swift Academy?
Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Restricciones de parámetros de tipo
- Cláusulas where en funciones
- Restricción de tipos asociados
- Subíndices y extensiones genéricos