Benim için senin örneğin Swift 3.0.1 çalışmaz.
class Jedi {
let lightsaberColor = "Blue"
}
class Sith: Jedi {
override var lightsaberColor : String{return "Red"}
}
Xcode derleme zamanında hata atar: oyun alanında bu kodu girildi
bir 'var'
ait gaz giderici değişmez 'let' özelliği 'lightsaberColor' geçersiz kılamaz
Hayır, kayıtlı bir özelliğin türünü değiştiremezsiniz. Liskov İkame İlkesi , üst sınıfın istendiği yerde bir alt sınıfın kullanılmasına izin vermek için'u zorlar.
Ancak, var
olarak değiştirirseniz ve bu nedenle set
değerini sayılan özelliğe eklerseniz, depolanan özelliği aynı türde sayılan bir özelliği geçersiz kılabilirsiniz.
class Jedi {
var lightsaberColor = "Blue"
}
class Sith: Jedi {
override var lightsaberColor : String {
get {
return "Red"
}
set {
// nothing, because only red is allowed
}
}
}
Bu, depolanan özellikten hesaplanan özellik arasında geçiş yapmak mantıklı olabileceğinden mümkündür. Ancak depolanmış bir var
özelliği ile depolanmış bir var
özelliğini geçersiz kılmanız mantıklı değildir, çünkü yalnızca mülkün değerini değiştirebilirsiniz. Ancak, depolanmış bir özelliği kayıtlı bir özelliği geçersiz kılmazsınız.
Ben Sith Jedi :-P demek değildir. Bu nedenle, bunun işe yaramayacağı açıktır. Swift 4 için
[Swift farklı tip üst sınıf özelliği geçersiz kılma] olası çift (http://stackoverflow.com/questions/24094158/overriding-superclass-property-with-different-type-in-swift) –