Swift “和”的区别是什么&引用;及"!&引用;斯威夫特?

Swift “和”的区别是什么&引用;及"!&引用;斯威夫特?,swift,Swift,当我在Swift中声明变量时,我知道“?”和“!”是什么意思。但当使用这些变量时,它们意味着什么?例如,在此代码中: var attachment: NSTextAttachment = NSTextAttachment() attachment.image = UIImage(named: "placeholder.png") attachment.image!.size ... // or attachment.image?.size ... attachment.image!。大小和附件

当我在Swift中声明变量时,我知道“?”和“!”是什么意思。但当使用这些变量时,它们意味着什么?例如,在此代码中:

var attachment: NSTextAttachment = NSTextAttachment()
attachment.image = UIImage(named: "placeholder.png")
attachment.image!.size ... // or attachment.image?.size ...

attachment.image!。大小
附件.image?大小

使用
附件.image!。大小
如果保证
图像?
不是
。如果你错了(而且是
nil
),你的应用程序将崩溃。这称为强制展开

如果您不确定它是否为
nil
,请使用
image?

在你的情况下,
image
可以,因为您可以控制是否存在
placeholder.png


阅读上的所有文档。它是语言的基本组成部分。

什么是语言!和?:

  • 使用?如果该值将来可以变为零,那么您可以测试 这个
  • 使用!如果将来真的不应该变成零, 但一开始它必须是零
如果您使用的是
attachment.image!。大小
任何带有的变量!也就是说,编译器不必担心变量有任何值或
nil
。 它将进一步采取行动,它将在这里尝试获得图像的大小。如果
attachment.image
nil
,则应用程序将在此崩溃

而,
attachment.image?.size
,这将确保您,如果
attachment.image
不是零,则将执行进一步的操作,否则,它将确认应用程序不会在
image
nil
值的情况下崩溃

摘要:


我们必须使用!,当我们确保选项类型变量一次有值时,我们需要对其采取进一步的操作,否则。

当您使用
且变量为
nil
它将触发运行时错误,但如果使用
它将正常失败。
更多详细信息请参见两个符号!然后呢?用于可选。我们必须使用!,当我们确保选项类型变量一次有值时,我们需要对其采取措施。否则,如果变量值为nil,它将崩溃。如果您使用的是?,则应用程序在nil情况下不会崩溃

您可以通过此链接了解更多信息:-