Swift unwrapping可选值"?"和"!"

时间:2017-07-24 05:42:25

标签: swift optional

我在?!

打开可选值时有什么区别

如果有班级名称A且有属性名称proA

然后,如果我做一个像这样的实例

var a:A? = A()
a?.proA
a!.proA

我可以接近财产' proA'以上两种方式。我知道如果使用a.proA我无法获得价值,因为a是可选类型。

另外,我知道a!.proA可以获得价值,因为它会解包有效值

什么是a?.proA

a?.proAa!.proA

之间有何区别?

1 个答案:

答案 0 :(得分:1)

如你所述,!强行打开可选项。

  var a: A? = A()
  a!.prop

但是,如果从未为可选项分配值,会发生什么?这意味着它是nil

  var a: A?;
  a!.pop

您收到Swift运行时错误(将其视为其他语言(例如Java)中的空指针异常的等效项。)

另一方面,如果您使用?,则可以利用可选链接。这使您可以优雅地遍历可选属性,而不必担心会导致运行时错误。如果链中的某些中间属性为nil,则整个表达式将返回nil

 var a: A?;
 a?.pop //returns nil, no runtime error