Swift dilinde, bir örneği başlatmak için, o sınıfın tüm alanlarını doldurmak ve ancak o zaman süper yapıcı çağırmak gerekir:
class Base {
var name: String
init(name: String) {
self.name = name
}
}
class Derived: Base {
var number: Int
init(name: String, number: Int) {
// won't compile if interchange lines
self.number = number
super.init(name)
}
}
Benim için geriye doğru görünüyor, çünkü örneğin self
alanlarına değer atamadan önce örneğin oluşturulması gerekiyor ve bu kod zincirleme sadece atamadan sonra gerçekleşiyormuş gibi bir izlenim bırakıyor . Bunun dışında, üst sınıfın alt sınıfının getirdiği nitelikleri okumak için yasal bir yolu yoktur, bu nedenle bu durumda güvenlik dikkate alınmaz.
Ayrıca, JavaScript ve hatta Swift'in biraz manevi atası olan Objective C gibi diğer birçok dil, erişmeden önce zincirleme çağrıyı gerektirir self
, sonra değil.
Süper yapılandırıcıyı çağırmadan önce alanların tanımlanmasını zorunlu kılmak için bu seçimin ardındaki neden nedir?
self
.