加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 06:01:59 所属栏目:百科 来源:网络整理
导读:在Swift函数签名中,什么是!后一个参数暗示?更具体地说,这是否意味着参数需要在传入之前被解开,或者它在传入时被自动解包。这里是一个例子: func annotationButtonTUI(sender: UIButton!) { } 在这种情况下,函数是一个UIButton的目标,所以无论发生什
在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?。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读