ネスト型(nested types)は、既存の型 — クラス、構造体、もしくは列挙型の内部に新しい構造体、クラス、列挙型を宣言することを可能にします。これにより、コードの構造をより良く整理し、実装の詳細を隠し、型が親にのみ関連していることを明示できます。
例:
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)
ネスト型は、その名前空間の外部では直接アクセスできないため、誤用のリスクが減り、コードの可読性が向上します。
名前空間の外でネストされたクラスまたは構造体を継承できますか?ネスト型へのアクセスにはどのような構文が使用されますか?
回答:
class Game { class Level {} } class AdvancedLevel: Game.Level {} // 許可されます
ParentType.NestedType の形式が必要です。物語
プロジェクトのビジネスロジックの再設計の際、型が非常に深くネストされました: 列挙型の構造体内の構造体。内部型へのアクセスのための長い構文が、新しいチームメンバーを混乱させ、ユニットテストを困難にしました。
物語
プログラマーは、クラス内の状態のためにネストされた列挙型を宣言しましたが、クラスの外で名前の修飾なしに使用しようとしました。これによりコンパイラエラーが発生し、プロジェクト全体での参照を修正する必要がありました。
物語
プロジェクトのスケーリングにおいて、別の開発者が内部ネストクラスからクラスを継承しようとしましたが、プライベートプロパティへのアクセスエラーに直面しました。なぜなら、内部メンバーへのアクセスメカニズムは親の名前空間の外では拡張できないからです。