我理解的是
var perhapsInt : Int?
这个自动设置为.None
值。下面的代码片段证实了这一点(没有编译器错误)
class MyClass {
var num1: Int = 0
var num2: Int?
init(num1: Int) {
self.num1 = num1
}
}
var newClass = MyClass(num1: 5)
newClass.num1 // prints '5'
newClass.num2 // prints 'nil'
我对可选初始化过程的理解正确吗?如果是,为什么当我将num2
更改为let
时它不起作用。
我原本期望使用let
时,可选项的默认值也应该是nil
。我错过了什么吗?
class MyClass {
var num1: Int = 0
let num2: Int?
init(num1: Int) {
self.num1 = num1
// compiler error : return from initialiser without initialising all stored properties
}
}
...
我的问题是,这两种情况怎么都是正确的呢?难道不应该只有一种情况吗?要么可选值自动设置为.None
,要么就不是。
let
只要求你分配一次即可。当涉及到初始化时,所有的let
在初始化完成之前都需要有一个值。因此,你可以通过默认值或者初始化器本身来实现这个目的。 - akashivskyy