为什么swift不允许在对象初始化后设置可选常量的值?

时间:2016-01-23 21:43:44

标签: swift

下面的代码会产生一个编译错误,说明"错误:从初始化程序返回而不初始化所有存储的属性(' self.response'未初始化)"

class Question {
    let text: String
    let response: String?
    init(text: String) {
        self.text = text
    }
    func ask() {
        print(text)
    }
}

我想做出#34;回应"常数和初始化时,响应将是未知的。除了"从初始化程序返回而不初始化所有存储的属性",为什么我必须使它" var"?

2 个答案:

答案 0 :(得分:2)

因为Swift试图让你实现安全的代码,并且具有未初始化的存储属性实际上并不安全,因为你或类的客户端可以在正确设置之前使用该常量,结果将是未定义的。这是导致很多错误的原因,可能无法立即捕获。

此外,因为可选的常量存储属性被初始化为具有nil值,如果您能够在初始化后更改其值,则会违反"常量"你的常数。这就是为什么你需要将它声明为var。

答案 1 :(得分:1)

如果声明行中没有提供初始值,可选变量/属性将根据定义自动设置为nil

可选常量会粘在nil上,这没有任何意义......

因此,编译器不允许您以这种方式声明可选常量。