我在?
和!
如果有班级名称A且有属性名称proA
然后,如果我做一个像这样的实例
var a:A? = A()
a?.proA
a!.proA
我可以接近财产' proA'以上两种方式。我知道如果使用a.proA
我无法获得价值,因为a
是可选类型。
另外,我知道a!.proA
可以获得价值,因为它会解包有效值
什么是a?.proA
?
a?.proA
和a!.proA
答案 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