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 举报,一经查实,本站将立刻删除。