Les types imbriqués (nested types) permettent de déclarer de nouvelles structures, classes et énumérations à l'intérieur de types existants — classes, structures ou énumérations. Cela permet de mieux structurer le code, de cacher les détails d'implémentation et d'indiquer clairement qu'un type est lié uniquement à son parent.
Exemple :
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)
Les types imbriqués ne sont pas accessibles directement en dehors de leur espace de noms, ce qui réduit le risque d'utilisation incorrecte et rend le code plus lisible.
Peut-on hériter d'une classe imbriquée ou d'une struct en dehors de son espace de noms ? Quel est le syntaxe utilisée pour accéder aux types imbriqués ?
Réponse :
class Game { class Level {} } class AdvancedLevel: Game.Level {} // autorisé
ParentType.NestedType.Histoire
Dans la refonte de la logique métier du projet, les types ont été imbriqués trop profondément : une structure dans une énumération dans une structure. Cela a entraîné une longue syntaxe pour accéder aux types internes, ce qui a dérouté les nouveaux membres de l'équipe et rendu les tests unitaires difficiles.
Histoire
Un programmeur a déclaré une énumération imbriquée pour des états dans une classe, mais a essayé de l'utiliser sans qualification de nom en dehors de la classe. Cela a provoqué une erreur de compilation et a nécessité de corriger les références dans tout le projet.
Histoire
Dans le cadre de l'évolutivité du projet, un autre développeur a essayé d'hériter d'une classe d'une classe imbriquée, mais a rencontré des erreurs d'accès aux propriétés privées, car le mécanisme d'accès aux membres internes ne peut pas être étendu en dehors de l'espace parent.