Eingebettete Typen (nested types) ermöglichen es, neue Strukturen, Klassen und Enumerationen innerhalb bestehender Typen - Klassen, Strukturen oder Enum - zu deklarieren. Dies ermöglicht eine bessere Strukturierung des Codes, verbirgt Implementierungsdetails und macht explizit, dass der Typ nur zu seinem Elternteil gehört.
Beispiel:
struct Schachbrett { enum FigurenTyp { case könig, dame, turm, läufer, springer, bauern } struct Feld { let datei: Charakter let rang: Int } } let königTyp = Schachbrett.FigurenTyp.könig let feld = Schachbrett.Feld(datei: "E", rang: 4)
Eingebettete Typen sind außerhalb ihres Namensraums nicht direkt zugänglich, was das Risiko eines falschen Gebrauchs verringert und den Code lesbarer macht.
Kann man eine eingebettete Klasse oder Struktur außerhalb ihres Namensraums vererben? Welches Syntax wird verwendet, um auf eingebettete Typen zuzugreifen?
Antwort:
class Spiel { class Ebene {} } class ErweiterteEbene: Spiel.Ebene {} // erlaubt
ParentType.NestedType erforderlich.Geschichte
Bei der Neugestaltung der Geschäftslogik des Projekts wurden Typen zu tief eingebettet: eine Struktur in einem Enum in einer Struktur. Dies führte zu einer langen Syntax beim Zugriff auf interne Typen, die neue Teammitglieder verwirrte und Unit-Tests erschwerte.
Geschichte
Ein Programmierer erklärte ein eingebettetes Enum für Zustände in einer Klasse, versuchte aber, es ohne Namensqualifikation außerhalb der Klasse zu verwenden. Dies führte zu einem Kompilierungsfehler und erforderte das Korrigieren der Verweise im gesamten Projekt.
Geschichte
Im Rahmen der Skalierung des Projekts versuchte ein anderer Entwickler, eine Klasse aus einer eingebetteten Klasse (nested class) zu vererben, stieß jedoch auf Zugriffsfehler auf private Eigenschaften, da der Zugriff auf interne Mitglieder nicht außerhalb des Elternnamensraums erweitert werden kann.