感叹号在Swift方法的头部的数据类型中的含义是什么

时间:2014-06-17 23:08:51

标签: swift

我注意到了一些方法,主要是在协议中有一个!在他们的参数。例如来自UIImagePickerControllerDelegate的这些:

protocol UIImagePickerControllerDelegate : NSObjectProtocol {
    @optional func imagePickerController(picker: UIImagePickerController!, didFinishPickingImage image: UIImage!, editingInfo: NSDictionary!)
    @optional func imagePickerController(picker: UIImagePickerController!, didFinishPickingMediaWithInfo info: NSDictionary!)
    @optional func imagePickerControllerDidCancel(picker: UIImagePickerController!)
}

究竟意味着什么!在这种情况下?

1 个答案:

答案 0 :(得分:5)

它被称为Implicitly Unwrapped Optional

  

有时从程序的结构中可以明确看出一个可选的意愿   在首次设置该值之后,始终有一个值。在这些情况下,它   有助于删除检查和解包可选值的需要   每次访问它,因为它可以安全地假设有一个   一直都很重要。

通常,在Swift中访问Objective-C API时,您会看到很多这些Implicitly Unwrapped Optionals,因为Objective-C中的指针可能为零。这意味着变量必须是可选的,但为了使API更像Objective-C,我们希望处理它就像它不是可选的。

隐式展开的选项看起来像普通(非可选)变量一样工作,但如果它们在尝试使用它们时确实是nil,则会出现运行时错误,整个程序将被停止。所以要谨慎使用它们并小心它们。