0Pricing
Swift Academy · Lección

Reflexión con Mirror

Inspeccione las propiedades de cualquier valor durante la ejecución.

Reflexión con Mirror es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 3 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.

¿Qué es Mirror?

Mirror es la reflexión del entorno de ejecución de Swift: permite inspeccionar la estructura de un valor, sus propiedades y sus valores, sin conocer el tipo concreto en tiempo de compilación.

Crear un Mirror

Pase cualquier valor a Mirror(reflecting:):

struct Point { let x: Int; let y: Int }
let m = Mirror(reflecting: Point(x: 1, y: 2))
print(m.children.count)  // 2

Iterar los elementos secundarios

Cada elemento secundario es un par de etiqueta y valor:

struct User { let name: String; let age: Int }
let m = Mirror(reflecting: User(name: "Ann", age: 30))
for child in m.children {
    print("\(child.label ?? "?") = \(child.value)")
}
// name = Ann
// age = 30

Crear un Dictionary de campos

La reflexión puede aplanar una estructura en un diccionario:

struct Config { let host: String; let port: Int }
let m = Mirror(reflecting: Config(host: "x", port: 80))
var dict: [String: Any] = [:]
for c in m.children { if let l = c.label { dict[l] = c.value } }
print(dict["port"]!)  // 80

displayStyle

Mirror informa de un displayStyle: .struct, .class, .enum, .tuple, .collection, etc.; así puede ramificar según el tipo de valor.

Inspeccionar el estilo de visualización

Determine qué tipo de valor está reflejando:

struct S { let a = 1 }
let m = Mirror(reflecting: S())
if m.displayStyle == .struct {
    print("it is a struct with \(m.children.count) field(s)")
}
// it is a struct with 1 field(s)

Reflejar una tupla

Las tuplas exponen hijos posicionales:

let m = Mirror(reflecting: (10, "hi", true))
for c in m.children { print(c.value) }
// 10
// hi
// true

Reflejar enumeraciones

En los casos de enumeración con valores asociados, el hijo contiene el valor asociado:

enum Result2 { case ok(Int); case fail(String) }
let m = Mirror(reflecting: Result2.ok(42))
print(m.children.first?.value ?? "none")  // 42

Un impresor genérico de campos

La reflexión permite crear utilidades independientes del tipo:

func dump2(_ value: Any) {
    for c in Mirror(reflecting: value).children {
        print("\(c.label ?? "_"): \(c.value)")
    }
}
struct Car { let make: String; let year: Int }
dump2(Car(make: "Mini", year: 2020))
// make: Mini
// year: 2020

Costes y límites de la reflexión

Mirror es más lento que el acceso directo y es de solo lectura — no puede establecer propiedades mediante él. Utilícelo para depuración, registro y utilidades de serialización, no en rutas críticas.

struct P { let v: Int }
let m = Mirror(reflecting: P(v: 5))
print(m.children.first!.value)  // 5  (read only)

Convertir valores reflejados

Los valores de los hijos tienen el tipo Any; conviértalos de nuevo al tipo concreto cuando lo necesite:

struct Box { let count: Int; let label: String }
let m = Mirror(reflecting: Box(count: 3, label: "hi"))
for c in m.children {
    if let n = c.value as? Int { print("int: \(n)") }
    if let s = c.value as? String { print("str: \(s)") }
}
// int: 3
// str: hi

Comprobación rápida

¿Qué devuelve iterar sobre Mirror(reflecting: value).children?

Resumen

Ha aprendido a utilizar Mirror:

  • Mirror(reflecting:) inspecciona un valor en tiempo de ejecución
  • children proporciona pares de etiqueta y valor
  • displayStyle indica si se trata de una estructura, una clase, una enumeración, una tupla o una colección
  • Es de solo lectura y más lento — resulta excelente para depuración y serialización, pero no para rutas críticas

A continuación: creación de tipos fáciles de depurar.

Preguntas frecuentes

¿La lección «Reflexión con Mirror» es gratis?

Sí — el texto completo de «Reflexión con Mirror» 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 «Reflexión con Mirror»?

Inspeccione las propiedades de cualquier valor durante la ejecución. 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 3 de 4.

¿Cuánto tiempo toma la lección «Reflexión con Mirror»?

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. CustomStringConvertible
  2. CustomDebugStringConvertible
  3. Reflexión con Mirror
  4. Crear tipos fáciles de depurar
← Volver a Swift Academy