我有两节课,Shape和Square
Shape
Square
class Shape { var numberOfSides = 0 var name: String init(name:String) { self.name = name } func simpleDescription() -> String { return "A shape with \(numberOfSides) sides." } } class Square: Shape { var sideLength: Double init(sideLength:Double, name:String) { super.init(name:name) // Error here self.sideLength = sideLength numberOfSides = 4 } func area () -> Double { return sideLength * sideLength } }
通过上面的实现,我得到了错误:
property 'self.sideLength' not initialized at super.init call super.init(name:name)
为什么self.sideLength在致电之前必须先设置super.init?
self.sideLength
super.init
引用Swift编程语言,它回答了您的问题:
“ Swift的编译器执行四项有用的安全检查,以确保两阶段初始化完成且没有错误:” 安全检查1“指定的初始值设定项必须确保由其类引入的所有属性在将其委托给超类初始值设定项之前都已初始化。” 摘录自:苹果公司“ The Swift Programming Language”。iBooks。 https://itunes.apple.com/cn/book/swift-programming- language/id881256329?mt=11
“ Swift的编译器执行四项有用的安全检查,以确保两阶段初始化完成且没有错误:”
安全检查1“指定的初始值设定项必须确保由其类引入的所有属性在将其委托给超类初始值设定项之前都已初始化。”
摘录自:苹果公司“ The Swift Programming Language”。iBooks。 https://itunes.apple.com/cn/book/swift-programming- language/id881256329?mt=11