0Pricing
Swift Academy · Lección

Tipos opacos con la palabra clave some

Devuelva tipos opacos desde funciones para preservar la identidad del tipo sin exponerla.

Tipos opacos con la palabra clave some es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 2 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.

El problema que resuelven los tipos opacos

Devolver un tipo de protocolo con any pierde información de tipos. some la conserva mientras oculta la implementación.

protocol Shape { var area: Double { get } }
struct Circle: Shape { var area: Double { .pi * 4 } }

Devolver some Protocol

some Shape como tipo de retorno indica al código que llama «devuelvo un tipo Shape específico» sin revelar cuál.

func makeShape() -> some Shape {
  return Circle()
}
let s = makeShape()
print(s.area)

Se conserva la identidad del tipo

Como los tipos some tienen un tipo subyacente fijo, el compilador permite operaciones que requieren Self.

func makeEquatableShape() -> some Shape & Equatable {
  return Circle()
}
let a = makeEquatableShape()
let b = makeEquatableShape()
print(a == b) // works because types match

some frente a any

some es opaco (un único tipo fijo), mientras que any es existencial (cualquier tipo que cumpla con el protocolo en tiempo de ejecución).

func withSome() -> some Shape { Circle() }  // opaque
func withAny() -> any Shape { Circle() }   // existential

some en el cuerpo de SwiftUI

SwiftUI usa some View para que el cuerpo de cada vista devuelva un único tipo coherente sin exponer los detalles internos del diseño.

struct ContentView: View {
  var body: some View {
    Text("Hello, World!")
  }
}

Parámetros opacos con some

Swift 5.7 y versiones posteriores permiten some Protocol en las posiciones de parámetros como abreviatura sintáctica de las restricciones genéricas.

func printArea(_ shape: some Shape) {
  print(shape.area)
}
printArea(Circle())

Genéricos invertidos

Un parámetro opaco some P equivale a (_ value: T). El compilador infiere T en el sitio de llamada.

func doubled(_ value: some Numeric) -> some Numeric {
  value * 2
}

Restricciones sobre some

Puede combinar protocolos con tipos opacos igual que con los genéricos.

func process(_ item: some Codable & Hashable) {
  let hash = item.hashValue
  print(hash)
}

Devolver tipos diferentes

A diferencia de los tipos existenciales, no puede devolver tipos conformes diferentes desde distintas ramas cuando usa tipos opacos.

// This would NOT compile:
// func shape(_ big: Bool) -> some Shape {
//   big ? Circle() : Square()  // ERROR: different types
// }

Tipos opacos en protocolos

Los protocolos con tipos asociados resultan más sencillos de usar como tipos de retorno con some.

protocol Buildable { associatedtype Output; func build() -> Output }
func build(_ b: some Buildable) -> some Any {
  b.build()
}

Cuándo elegir some

Prefiera some cuando devuelva un único tipo coherente y quiera conservar su identidad. Use any cuando necesite colecciones heterogéneas.

var shapes: [any Shape] = [Circle(), Circle()]
let single: some Shape = Circle()

Comprobación rápida

¿Qué garantiza la palabra clave some sobre un tipo de retorno?

Repaso de la lección

some crea tipos de retorno opacos que ocultan el tipo concreto, pero conservan la identidad del tipo. some View de SwiftUI es el ejemplo canónico. Use some para retornos de un solo tipo y any para colecciones heterogéneas.

Preguntas frecuentes

¿La lección «Tipos opacos con la palabra clave some» es gratis?

Sí — el texto completo de «Tipos opacos con la palabra clave some» 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 «Tipos opacos con la palabra clave some»?

Devuelva tipos opacos desde funciones para preservar la identidad del tipo sin exponerla. 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 4.

¿Cuánto tiempo toma la lección «Tipos opacos con la palabra clave some»?

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. Restricciones genéricas y cláusulas where
  2. Tipos opacos con la palabra clave some
  3. Existenciales con any y type erasure
  4. Tipos asociados principales y throws tipados
← Volver a Swift Academy