I tipi annidati (nested types) consentono di dichiarare nuove strutture, classi e enumerazioni all'interno di tipi esistenti — classi, strutture o enum. Questo permette di strutturare meglio il codice, nascondere i dettagli di implementazione e specificare chiaramente che un tipo appartiene solo al proprio genitore.
Esempio:
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)
I tipi annidati non sono direttamente accessibili al di fuori del loro spazio dei nomi, il che riduce il rischio di un uso improprio e rende il codice più leggibile.
È possibile ereditare una classe o una struct annidata al di fuori del suo spazio dei nomi? Quale sintassi viene utilizzata per accedere ai tipi annidati?
Risposta:
class Game { class Level {} } class AdvancedLevel: Game.Level {} // consentito
ParentType.NestedType.Storia
Nella riprogettazione della logica aziendale del progetto, i tipi erano stati annidati troppo in profondità: una struttura in un enum in una struct. Questo ha portato a una sintassi lunga per accedere ai tipi interni, che confondeva i nuovi membri del team e complicava i test unitari.
Storia
Un programmatore ha dichiarato un enum annidato per stati in una classe, ma ha cercato di usarlo senza qualificazione del nome al di fuori della classe. Questo ha causato un errore di compilazione e ha richiesto di correggere i riferimenti in tutto il progetto.
Storia
Nel contesto della scalabilità del progetto, un altro sviluppatore ha tentato di ereditare una classe da una classe annidata interna (nested class), ma ha incontrato errori di accesso alle proprietà private, poiché il meccanismo di accesso ai membri interni non può essere esteso al di fuori dello spazio genitore.