Los tipos anidados (nested types) permiten declarar nuevas estructuras, clases y enumeraciones dentro de tipos ya existentes — clases, estructuras o enum. Esto permite estructurar mejor el código, ocultar detalles de implementación y señalar explícitamente que un tipo pertenece solo a su padre.
Ejemplo:
struct Chessboard { enum PieceType { case king, queen, rook, bishop, knight, pawn } struct Square { let file: Character let rank: Int } } let kingType = Chessboard.PieceType.king let square = Chessboard.Square(file: "E", rank: 4)
Los tipos anidados no están directamente accesibles fuera de su espacio de nombres, lo que reduce el riesgo de un uso incorrecto y hace que el código sea más legible.
¿Se puede heredar una clase o struct anidada fuera de su espacio de nombres? ¿Qué sintaxis se utiliza para referirse a tipos anidados?
Respuesta:
class Game { class Level {} } class AdvancedLevel: Game.Level {} // válido
ParentType.NestedType.Historia
En la reestructuración de la lógica empresarial del proyecto, los tipos se anidaron demasiado: una estructura dentro de un enum dentro de una struct. Se generó una larga sintaxis para acceder a los tipos internos, lo que confundió a los nuevos miembros del equipo y dificultó las pruebas unitarias.
Historia
Un programador declaró un enum anidado para estados dentro de una clase, pero intentó utilizarlo sin la calificación del nombre fuera de la clase. Esto provocó un error de compilación y requirió corregir las referencias en todo el proyecto.
Historia
En el contexto de la escalabilidad del proyecto, otro desarrollador intentó heredar una clase de una clase anidada interna (nested class), pero se encontró con errores de acceso a propiedades privadas, porque el mecanismo de acceso a los miembros internos no se puede ampliar fuera del espacio padre.