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”。 –