Swift編程語言的示例代碼在第一行中沒有調用super.init。這似乎是一種不安全的做法,因爲繼承的項目可以被父構造器覆蓋,對吧?爲什麼Swift構造函數使用命名參數調用?
class EquilateralTriangle: NamedShape {
var sideLength: Double = 0.0
init(sideLength: Double, name: String) {
self.sideLength = sideLength
super.init(name: name)
numberOfSides = 3
}
var perimeter: Double {
get {
return 3.0 * sideLength
}
set {
sideLength = newValue/3.0
}
}
override func simpleDescription() -> String {
return "An equilateral triagle with sides of length \(sideLength)."
}
}
是的,你是對的。在這種情況下,'sideLenght'將被默認值覆蓋,並且您將失去用戶的輸入。你可以在這裏閱讀更多關於_initlaization_過程的信息:https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/swift_programming_language/Initialization.html – holex
@holex'sideLength'將被* not *覆蓋其默認值。在這種情況下,不需要指定默認值,但當您有多個初始化程序時,可能會派上用場,其中有些程序不需要知道「sideLength」。 –