【问题标题】:Constant property can be modified during initialization? MODIFIED? What?可以在初始化期间修改常量属性吗?修改的?什么?
【发布时间】:2016-07-08 15:51:50
【问题描述】:

引用自Chapter: Initialization的Swift 3.0办公文档

对于类实例,常量属性在初始化期间只能由引入它的类修改。它不能被子类修改。

据我了解,修改涉及到定义之后的动作,也就是声明赋值之后的动作>,又名重新赋值,因此我尝试了以下代码。

class SurveryQuestion {
    let text: String
    var response: String?
    init(text: String) {
        self.text = "do you like music?"
        self.text = text //Got an error here
    }
    func ask(){
        print(text)
    }
}

我在self.text = text 行遇到错误。编译器要求我将属性text从常量更改为变量。不是说常量属性可以被最初引入它的类的初始化器修改吗?

问题:我对modified这个词的理解有误吗?它是否意味着 声明 而不是 定义 之后会导致 修改 的动作是通过将值传递给常量。

【问题讨论】:

    标签: swift initialization constants


    【解决方案1】:

    我认为文档不够清晰。在初始化期间,您只能设置一次常量属性。如果属性的值是内联定义的,您也无法在初始化期间设置它。这是一个例子。

    class SomeClass {
    
        let someProperty: String = "A"
    
        init() {
    
            self.someProperty = "" //ERROR: Immutable value "self.someProperty" may only be initialized once.
        }
    }
    

    编译时错误//ERROR: Immutable value "self.someProperty" may only be initialized once.其实很好解释。

    【讨论】:

    • 我同意你的观点,无论如何,常数只能设置一次。通过在定义或初始化程序中分配默认值。只是这个 Modified 脚本让我很困惑。
    • 文档试图强调只有引入常量的类才能设置它,子类不能设置。文档的其他部分说“一旦为常量属性赋值,就不能进一步修改”。我认为您是对的,该注释可能会令人困惑。
    • 非常感谢您的解释和帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多