“?”之间有什么区别?和“!”在斯威夫特?

时间:2014-09-17 15:51:21

标签: swift

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

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

attachment.image!.sizeattachment.image?.size之间的区别是什么?

4 个答案:

答案 0 :(得分:42)

如果您确保attachment.image!.size不是image?,请使用nil。如果您错了(并且nil),您的应用就会崩溃。这称为强制展开

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

在您的情况下image!没问题,因为您可以控制placeholder.png是否存在。

阅读Swift Optionals上的所有文档。这是该语言的基本和基本部分。

答案 1 :(得分:26)

是什么!和?:

  • 使用?如果将来该值变为零,那么您可以进行测试 这个。
  • 使用!如果它真的不会在未来变为零, 但最初需要为零。

如果您使用attachment.image!.size任何变量!意思是,编译器不必担心该变量有任何值或nil。 它会进一步采取行动,它将尝试获得图像的大小。如果attachment.imagenil,则应用会在此处崩溃。

虽然,attachment.image?.size,这将确保您,如果attachment.image不是,则会发生进一步的操作,否则确认应用程序在{的情况下不会崩溃{1}} nil的值。

<强>要点:

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

答案 2 :(得分:1)

当您使用!且变量为nil时,它将触发运行时错误,但如果使用?则会正常失败。 apple document

中的更多详细信息

答案 3 :(得分:0)

两个符号!和?用于可选。当确保选项类型变量一次具有值并且需要对它进行操作时,我们应该使用!,否则如果变量值为nil它将崩溃,如果使用?,应用程序将不会崩溃没有案例。

您可以点击此链接获取更多信息:-https://www.youtube.com/watch?v=twBfiKsbHP8