我知道在 Swift 中,所有变量都必须设置一个值,并且通过使用可选项,我们可以将一个变量设置为最初设置为 nil
。
我不明白的是,用 !
设置变量是做什么的,因为我的印象是这“解包”了一个可选值。我认为这样做可以保证在该变量中有一个值可以解包,这就是为什么在 IBActions 上看到它使用的原因。
所以简单地说,当你做这样的事情时,被初始化的变量是什么:
var aShape : CAShapeLayer!
为什么/什么时候我会这样做?
在类型声明中,!
类似于 ?
。两者都是可选的,但 !
是一个“implicitly unwrapped" optional”,这意味着您不必打开它来访问该值(但它仍然可以是 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
}
nil
值并实际使用它,在swift中访问一个隐式展开的可选值,而它是nil 将抛出一个运行时异常。