在Swift,什么!在函数签名中的符号含义?

前端之家收集整理的这篇文章主要介绍了在Swift,什么!在函数签名中的符号含义?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在Swift函数签名中,什么是!后一个参数暗示?更具体地说,这是否意味着参数需要在传入之前被解开,或者它在传入时被自动解包。这里是一个例子:
func annotationButtonTUI(sender: UIButton!) { }

在这种情况下,函数是一个UIButton的目标,所以无论发生什么!正在自动发生。

我的想法是这意味着你可以期望一个未包装的发件人对象,所以你不需要尝试打开它。

这不是一个重复 – 有一些微妙的隐含的解开可选的函数签名超出了他们在别处的使用。

你看到在从ObjC导入的API中的隐式未包装可选属性,因为这是一个对象的最接近的Swift近似,该对象预期存在但可以是nil。这是一个妥协导入的API – 你可以直接解决这些变量像ObjC,你可以测试他们为nil使用Swift可选语法。 (关于Apple的理由,在Advanced Interoperability talk从WWDC14。)这种模式也适用于Interface Builder插入的IBAction声明,因为这些方法实际上也从ObjC代码调用

因为你似乎怀疑,Swift包裹可能的nil在从ObjC桥接,但是!在你的函数实现的声明中解包的值,所以你可以直接使用它。 (自行承担风险。)

由于Swift 1.2(2015年春季的Xcode 6.2),ObjC API可以注释为非空和可空,在这种情况下,这些API的Swift接口使用非可选类型或完全可选类型。 (自从Swift 2.0 / Xcode 7.0以来,几乎所有的苹果的API都被审核使用可空性注释,所以他们的Swift签名不再使用了!)

不太了解的是,你可以随意改变参数的可选性,当你实现自己的Swift函数,由ObjC调用。如果你希望编译器强制该发送者在你的action方法永远不能为nil,你可以采取!关闭参数类型。如果你希望编译器确保你总是测试参数,改变!到a?。

猜你在找的Swift相关文章