ProgrammationDéveloppeur iOS Moyen

Expliquez l'approche pour organiser et utiliser les types imbriqués (nested types) en Swift. Pourquoi est-ce nécessaire et quels pièges existent lors de l'héritage et de l'accès aux types imbriqués ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse.

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.

Question piège.

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 :

  • Les structures imbriquées et les énumérations à l'intérieur d'une structure ou d'une énumération ne peuvent pas être héritées en dehors de l'espace du type parent.
  • À l'intérieur d'une classe, une classe imbriquée peut être héritée uniquement à l'intérieur du même espace ou à travers le chemin complet :
class Game { class Level {} } class AdvancedLevel: Game.Level {} // autorisé
  • Pour faire référence, il est toujours nécessaire d'utiliser la notation ParentType.NestedType.

Exemples d'erreurs réelles dues à une méconnaissance des subtilités du sujet.


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.