对于类实例,常量属性在初始化期间只能由引入它的类进行修改。它不能被子类修改。
根据我的理解,修改涉及定义之后的操作,也就是声明和赋值,又名重新分配值,因此我尝试了以下代码。
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
从常量更改为变量。是不是说可以通过最初引入它的类的初始化程序修改常量属性?
问题:我是否理解错误地修改这个词?是否意味着声明之后的行动而不是定义会导致修改意味着将值传递给常量。
答案 0 :(得分: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.
实际上解释得很清楚。