据我所知,在Swift中,所有变量都必须设置一个值,并且通过使用选项,我们可以将变量设置为最初设置为nil
。
我不明白的是,用!
设置变量的做法是什么,因为我的印象是这个"展开"来自可选项的值。我想通过这样做,你保证有一个值可以解开该变量,这就是为什么在IBActions上你会看到它被使用。
简单地说,当你做这样的事情时,初始化的变量是什么:
var aShape : CAShapeLayer!
为什么/我什么时候会这样做?
答案 0 :(得分:138)
在类型声明中,!
与?
类似。两者都是可选的,但!
是" implicitly unwrapped" optional,这意味着您不必打开它来访问该值(但它仍然可以为零)。
这基本上是我们在objective-c中已经拥有的行为。值可以为零,您必须检查它,但您也可以直接访问该值,就好像它不是可选的(重要的区别在于,如果您没有&# 39;检查是否会发生运行时错误
// 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
}