下面的代码会产生一个编译错误,说明"错误:从初始化程序返回而不初始化所有存储的属性(' self.response'未初始化)"
class Question {
let text: String
let response: String?
init(text: String) {
self.text = text
}
func ask() {
print(text)
}
}
我想做出#34;回应"常数和初始化时,响应将是未知的。除了"从初始化程序返回而不初始化所有存储的属性",为什么我必须使它" var"?
答案 0 :(得分:2)
因为Swift试图让你实现安全的代码,并且具有未初始化的存储属性实际上并不安全,因为你或类的客户端可以在正确设置之前使用该常量,结果将是未定义的。这是导致很多错误的原因,可能无法立即捕获。
此外,因为可选的常量存储属性被初始化为具有nil值,如果您能够在初始化后更改其值,则会违反"常量"你的常数。这就是为什么你需要将它声明为var。
答案 1 :(得分:1)
如果声明行中没有提供初始值,可选变量/属性将根据定义自动设置为nil
。
可选常量会粘在nil
上,这没有任何意义......
因此,编译器不允许您以这种方式声明可选常量。