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

Ary*_*yan 20 swift

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

var attachment: NSTextAttachment = NSTextAttachment()
attachment.image = UIImage(named: "placeholder.png")
attachment.image!.size ... // or attachment.image?.size ...
Run Code Online (Sandbox Code Playgroud)

attachment.image!.size和之间有什么区别attachment.image?.size

Aar*_*ger 46

使用attachment.image!.size,如果你保证image?nil.如果你错了(确实如此nil)你的应用程序将崩溃.这称为强制展开.

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

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

阅读有关Swift Optionals的所有文档.它是该语言的基本和基本部分.


vir*_*rus 28

什么是 !和?:

  • 使用 ?如果将来该值变为零,那么您需要对此进行测试.
  • 使用 !如果它真的不应该在未来变为零,但它最初需要为零.

如果您正在使用attachment.image!.size任何变量!意思是,编译器不打扰该变量有任何值或nil.它会采取进一步行动,它将尝试获得图像的大小.如果attachment.imagenil那么应用程序将崩溃在这里.

虽然,attachment.image?.size这将确保你,如果attachment.image不是零,那么将进行进一步的行动,否则它确认应用程序不会在nil价值的情况下崩溃image.

摘要:

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