我在Apple提供的Swift文档中读到了这句话
“Subclasses are only allowed to modify variable properties of superclasses during initialization.”
Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks.
Run Code Online (Sandbox Code Playgroud)
但是,如果我运行此代码,它没有问题:
class Person{
var name:String
init(name:String){
self.name = name
}
}
class SuperHero:Person{
var power:String?
init(name:String, power:String?){
self.power = power
super.init(name: name)
}
func changeName (){
// HERE I'M CHANGING A SUPERCLASS VARIABLE outside Initialization!!!
self.name = "Mark"
}
}
let superman = SuperHero(name: "Superman", power: "Fly!")
superman.changeName()
println("\(superman.name)")
Run Code Online (Sandbox Code Playgroud)
我误解了文档吗?
在引用的句子中有严重的误解.这是其自然环境中的原始报价.
子类只允许在初始化期间修改超类的变量属性.您无法修改子类的继承常量属性.
请正确阅读,因为该句意味着换句话说:
你可以在初始化期间修改超类的变量,但不允许你用超类的常量做这样的事情.
这里没有这样的声明:只允许在初始化期间修改变量,但以后不允许修改它们.
我希望现在有意义.
| 归档时间: |
|
| 查看次数: |
2492 次 |
| 最近记录: |