ProgramlamaOrta düzey iOS Geliştirici

Swift'te iç içe türlerin (nested types) organizasyonu ve kullanımıyla ilgili yaklaşımı açıklayın. Bu neden gereklidir ve iç içe türlerde miras alma ve erişim konusunda hangi tuzaklar vardır?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

İç 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.

Tuzağa Düşüren Soru.

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:

  • Bir yapının veya enumın içindeki iç içe yapılar ve enumlar ebeveyn türün ad alanı dışında miras alınamaz.
  • Sınıf içerisinde iç içe bir sınıf, yalnızca aynı ad alanı içinde veya tam yol ile miras alınabilir:
class Game { class Level {} } class AdvancedLevel: Game.Level {} // kabul edilebilir
  • Referans her zaman ParentType.NestedType biçiminde olmalıdır.

Konunun inceliklerini bilmemekten kaynaklanan gerçek hatalara örnekler.


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.