İç içe türler (nested types), yeni yapıların, sınıfların ve enumların mevcut türlerin — sınıflar, yapılar veya enumlar — içinde tanımlanmasına olanak tanır. Bu, kodun daha iyi yapılandırılmasını, uygulama ayrıntılarının gizlenmesini ve türün yalnızca ebeveynine ait olduğunu açıkça belirtmeyi sağlar.
Örnek:
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çe türler, ad alanları dışında doğrudan erişilebilir olmadığından, yanlış kullanım riskini azaltır ve kodu daha okunabilir hale getirir.
Ebeveyn ad alanı dışında iç içe bir sınıf veya struct miras alınabilir mi? İç içe türlere erişmek için hangi sözdizimi kullanılır?
Cevap:
class Game { class Level {} } class AdvancedLevel: Game.Level {} // kabul edilebilir
ParentType.NestedType biçiminde olmalıdır.Hikaye
Projenin iş mantığını yeniden tasarlarken türler çok derin iç içe yerleştirildi: bir enum içindeki struct içinde bir yapı. İçsel türlere erişim için uzun bir sözdizimi ortaya çıktı, bu da ekibin yeni üyelerini kafa karıştırdı ve birim testlerini zorlaştırdı.
Hikaye
Bir programcı sınıf içinde durumlardan oluşan iç içe bir enum tanımladı, ancak sınıf dışında ismi nitelikli olmaksızın kullanmaya çalıştı. Bu, bir derleme hatasına neden oldu ve projedeki tüm referansları düzeltmeyi gerektirdi.
Hikaye
Projenin ölçeklenmesi çerçevesinde başka bir geliştirici, iç içe bir sınıftan miras almaya çalıştı, ancak özel özelliklere erişim hatalarıyla karşılaştı, çünkü içsel üyelere erişim mekanizmasını ebeveyn ad alanı dışında genişletmek mümkün değildir.