我了解在Swift中所有变量都必须设置一个值,并且通过使用可选参数,我们可以将变量设置为nil初始值。
nil
我不明白的是,用a设置变量的作用!是什么,因为我的印象是这会“取消包装”来自可选值的值。我认为通过这样做,您可以保证在该变量中有一个要解包的值,这就是在IBActions上使用它的原因。
!
简而言之,当您执行以下操作时,要初始化的变量是什么:
var aShape : CAShapeLayer!
为何/何时执行此操作?
在类型声明中,!类似于?。两者都是可选的,但是!是“ 隐式展开的”可选的,这意味着您不必解包即可访问值(但它仍然可以为nil)。
?
这基本上是我们在Objective-C中已经拥有的行为。值 可以 为nil,您必须检查该值,但是您也可以直接访问该值,就好像它不是可选值一样(重要的区别是,如果不检查nil,您将得到一个运行时错误)
// 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 }