在Swift中声明选项和非选项

时间:2015-12-23 12:30:06

标签: swift optional

我确信这可能是重复的,但我无法找到任何整洁而紧凑的解释,所以就这样了。

我们都知道,如果我们声明一个像这样的变量

1> var a : String?

我们得到一个可选的

a: String? = nil

如果我们省略?,我们必须在创建时将a初始化为nil以外的其他内容。但是,如果我们说类似

2> var a : String!

我们得到了

a: String! = nil

让我感到困惑,因为我认为该声明意味着a不能是一个可选项。所以,玩弄REPL,我得到以下令人困惑的结果:

 3> a!
fatal error: unexpectedly found nil while unwrapping an Optional value

 4> a as! String
fatal error: unexpectedly found nil while unwrapping an Optional value

 5> a as! String?
$R2: String? = nil

 6> a as? String
fatal error: unexpectedly found nil while unwrapping an Optional value

 7> a as? String!
$R3: String!? = nil

有人能为此提供一些启示吗?

1 个答案:

答案 0 :(得分:3)

nil就是我们所说的隐式解包的可选。它是一个可选项,可以保存nil的值,但编译器不会产生任何关于它的编译时错误。

如果它具有nil值并且已被使用,则会出现运行时错误,就像强制解包具有{{1}}值的普通可选项一样。

  

当可选的值为时,隐式展开的选项很有用   确认在首次定义可选项后立即存在   绝对可以假设存在于此后的每一点。