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) // 2Iterar 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 = 30Crear 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"]!) // 80displayStyle
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
// trueReflejar 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") // 42Un 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: 2020Costes 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: hiComprobació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ónchildrenproporciona pares de etiqueta y valordisplayStyleindica 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
- CustomStringConvertible
- CustomDebugStringConvertible
- Reflexión con Mirror
- Crear tipos fáciles de depurar