我知道"?"和"!"当我在Swift中声明变量时。但是当使用这些变量时它们意味着什么?例如,在此代码中:
var attachment: NSTextAttachment = NSTextAttachment()
attachment.image = UIImage(named: "placeholder.png")
attachment.image!.size ... // or attachment.image?.size ...
attachment.image!.size
和attachment.image?.size
之间的区别是什么?
答案 0 :(得分:42)
如果您确保attachment.image!.size
不是image?
,请使用nil
。如果您错了(并且nil
),您的应用就会崩溃。这称为强制展开。
如果您不确定它不是nil
,请使用image?
。
在您的情况下image!
没问题,因为您可以控制placeholder.png
是否存在。
阅读Swift Optionals上的所有文档。这是该语言的基本和基本部分。
答案 1 :(得分:26)
是什么!和?:
如果您使用attachment.image!.size
任何变量!意思是,编译器不必担心该变量有任何值或nil
。
它会进一步采取行动,它将尝试获得图像的大小。如果attachment.image
为nil
,则应用会在此处崩溃。
虽然,attachment.image?.size
,这将确保您,如果attachment.image
不是,则会发生进一步的操作,否则确认应用程序在{的情况下不会崩溃{1}} nil
的值。
<强>要点:强>
我们必须使用!,当我们确保选项类型变量一次具有值时,我们需要对其进行进一步操作,否则。
答案 2 :(得分:1)
当您使用!
且变量为nil
时,它将触发运行时错误,但如果使用?
则会正常失败。
apple document
答案 3 :(得分:0)
两个符号!和?用于可选。当确保选项类型变量一次具有值并且需要对它进行操作时,我们应该使用!,否则如果变量值为nil它将崩溃,如果使用?,应用程序将不会崩溃没有案例。
您可以点击此链接获取更多信息:-https://www.youtube.com/watch?v=twBfiKsbHP8