我理解,在Swift中,所有变量都必须设置一个值,通过使用选项,我们可以将一个变量设置为nil
.
我不明白的是,将一个变量设置为!
意味着什么,因为我的印象是,这会从一个可选变量"展开"一个值.我认为这样做,可以保证变量中有一个要展开的值,这就是为什么在IBActions上使用它.
简单地说,当你这样做时,初始化变量是什么:
var aShape : CAShapeLayer!
我为什么/什么时候会这样做?
我理解,在Swift中,所有变量都必须设置一个值,通过使用选项,我们可以将一个变量设置为nil
.
我不明白的是,将一个变量设置为!
意味着什么,因为我的印象是,这会从一个可选变量"展开"一个值.我认为这样做,可以保证变量中有一个要展开的值,这就是为什么在IBActions上使用它.
简单地说,当你这样做时,初始化变量是什么:
var aShape : CAShapeLayer!
我为什么/什么时候会这样做?
在类型声明中,!
与?
类似.两者都是可选的,但!
是"implicitly unwrapped" optional",这意味着您不必展开它来访问值(但它仍然可以为零).
这基本上是我们在objective-c中已有的行为.值can为零,您必须判断它,但您也可以直接访问该值,就像它不是可选的一样(重要的区别是,如果不判断零,您将得到运行时错误)
// Cannot be nil
var x: Int = 1
// The type here is not "Int", it's "Optional Int"
var y: Int? = 2
// The type here is "Implicitly Unwrapped Optional Int"
var z: Int! = 3
// you can add x and z
x + z == 4
// ...but not x and y, because y needs to be unwrapped
x + y // error
// to add x and y you need to do:
x + y!
// but you *should* do this:
if let y_val = y {
x + y_val
}