在Swift中更改超类变量

Mat*_*oal 1 swift

我在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)

我误解了文档吗?

hol*_*lex 7

在引用的句子中有严重的误解.这是其自然环境中的原始报价.

子类只允许在初始化期间修改超类的变量属性.您无法修改子类的继承常量属性.

请正确阅读,因为该句意味着换句话说:

  1. 你可以在初始化期间修改超类的变量,但不允许你用超类的常量做这样的事情.

  2. 这里没有这样的声明:只允许在初始化期间修改变量,但以后不允许修改它们.

我希望现在有意义.