0Pricing
Swift Academy · Lección

Restricciones (where) e inferencia de tipos

Restrinja el código genérico mediante where (por ejemplo, restricciones Equatable/Comparable o sobre Element) y observe cómo Swift infiere los tipos genéricos en los puntos de llamada.

Restricciones (where) e inferencia de tipos es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 2 de 3. 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 3 lecciones en total.

¿Por qué usar restricciones?

Añada restricciones para que el código genérico pueda usar determinadas operaciones, como == o <. La inferencia de tipos de Swift selecciona entonces los tipos concretos en las llamadas.

Restricción Equatable

where T: Equatable permite realizar comprobaciones de igualdad. Sin ella, == no está disponible para cualquier T.

// Find the first index of value in an array of T
func indexOf<T>(_ value: T, in array: [T]) -> Int? where T: Equatable {
    for (i, x) in array.enumerated() {
        if x == value { return i }        // allowed because T: Equatable
    }
    return nil
}
print(indexOf(3, in: [1,2,3,2]) ?? -1)     // 2
print(indexOf("b", in: ["a","b","c"]) ?? -1)  // 1

Restricción Comparable

Usar una restricción como T: Comparable habilita operaciones de orden, como <.

// Return the minimum value of a collection when elements are Comparable
func minimum<T: Comparable>(_ xs: [T]) -> T? {
    guard var best = xs.first else { return nil }
    for x in xs.dropFirst() {
        if x < best { best = x }
    }
    return best
}
print(minimum([7,3,9]) ?? -1)    // 3
print(minimum(["b","a","c"]) ?? "?") // "a"

Extensión con where

Use where Element: ... para añadir API únicamente para determinados tipos de elementos, en este caso, arrays de Equatable.

// Add a helper only when the array's Element is Equatable
extension Array where Element: Equatable {
    func removingDuplicates() -> [Element] {
        var seen: [Element] = []
        for x in self {
            if !seen.contains(x) { seen.append(x) }
        }
        return seen
    }
}
print([1,2,2,3].removingDuplicates())   // [1,2,3]

Varias restricciones

Combine restricciones: restrinja el tipo genérico y sus tipos asociados, por ejemplo, S.Element: Equatable.

// Require both Sequence and Equatable elements; force same-type relationship
func allEqual<S>(_ s: S) -> Bool
where S: Sequence, S.Element: Equatable {
    var it = s.makeIterator()
    guard let first = it.next() else { return true }
    while let v = it.next() { if v != first { return false } }
    return true
}
print(allEqual([2,2,2]))   // true
print(allEqual([1,2,1]))   // false

Inferencia en la práctica

Swift infiere los parámetros genéricos a partir de los argumentos y del contexto, por lo que rara vez debe especificar <T> explícitamente.

// Inference: compiler deduces concrete types
let i = indexOf(10, in: [5,10,15])   // T is Int
let j = minimum(["z","x"])           // T is String
print(i ?? -1, j ?? "")

Significado de where

Comprobación rápida: ¿Qué hace una cláusula where?

Resumen

Resumen: Restrinja los genéricos con where, por ejemplo, T: Equatable o Element: Comparable, y confíe en la inferencia de tipos de Swift para seleccionar los tipos concretos en las llamadas.

Preguntas frecuentes

¿La lección «Restricciones (where) e inferencia de tipos» es gratis?

Sí — el texto completo de «Restricciones (where) e inferencia de tipos» 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 3 lecciones en total.

¿Qué aprenderé en «Restricciones (where) e inferencia de tipos»?

Restrinja el código genérico mediante where (por ejemplo, restricciones Equatable/Comparable o sobre Element) y observe cómo Swift infiere los tipos genéricos en los puntos de llamada. 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 2 de 3.

¿Cuánto tiempo toma la lección «Restricciones (where) e inferencia de tipos»?

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

  1. Funciones y tipos genéricos
  2. Restricciones (where) e inferencia de tipos
  3. Algoritmos genéricos sobre colecciones
← Volver a Swift Academy