微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在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?。

原文地址:https://www.jb51.cc/swift/320919.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐