swift - 在 Swift 中更改父类(super class)变量

标签 swift

我在Apple提供的Swift文档中看到了这句话

“Subclasses are only allowed to modify variable properties of superclasses during initialization.”

Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks.

但如果我运行这段代码,它就没有问题:

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)")

我是否误解了文档?

最佳答案

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

Subclasses are only allowed to modify variable properties of superclasses during initialization. You can’t modify inherited constant properties of subclasses.

请读入正确的重音,因为这句话的意思是换句话说:

  1. 您可以在初始化期间修改父类(super class)的变量,但您不能对父类(super class)的常量做这样的事情。

  2. 这里没有这样的声明:您只能在初始化期间修改变量,但之后您将不允许修改它们。 p>

我希望现在说得通了。

关于swift - 在 Swift 中更改父类(super class)变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24361548/

相关文章:

ios - 导航 Controller 和TableView : NavBar Hidden after hidden = true one time

swift - 在 Realm 中存储简单数组,而无需在 Swift 中创建托管列表

swift - 如何延迟返回调用函数swift

swift - 核心数据谓词按今天的日期过滤

swift - GoogleMaps pod 可以构建在 cocoapod 中吗?

database - 为什么 Swift 2 无法将数据保存到 SQLite 数据库?

xcode - 使用参数初始化自定义 UITableViewCell

enums - 创建用于在 swift 中定义常量的类

swift - 设置正确的 CNContact.predicateForContacts 以选择电子邮件

swift - 使用 Function 在 Swift 3 中过滤 Realm 对象