【发布时间】:2017-11-07 11:48:56
【问题描述】:
我正在尝试将项目的源代码从 Swift 3 转换为 Swift 4。Xcode 给我的一个警告是关于我的选择器。
例如,我使用这样的常规选择器将目标添加到按钮:
button.addTarget(self, action: #selector(self.myAction), for: .touchUpInside)
这是它显示的警告:
“#selector”的参数指的是“ViewController”中的实例方法“myAction()”,它依赖于 Swift 4 中已弃用的“@objc”属性推断
添加“@objc”以将此实例方法公开给 Objective-C
现在,在错误消息上点击 Fix 会对我的函数执行以下操作:
// before
func myAction() { /* ... */ }
// after
@objc func myAction() { /* ... */ }
我真的不想重命名我的所有函数以包含 @objc 标记,我认为这没有必要。
如何重写选择器来处理弃用?
相关问题:
【问题讨论】:
-
不,将它们标记为
@objc是现在必须将它们公开给Obj-C,因此与选择器一起使用。 -
所以不推荐使用的部分将公共访问功能推断为
@objc?这有点烦人,但我通常将这些函数设为私有,无论如何都要求我将其标记为@objc。 -
请参阅SE-0160 了解有关更改的更多信息。另一种选择是将给定的类标记为
@objcMembers,以便将所有与 Obj-C 兼容的成员公开给 Obj-C,但我不建议这样做,除非您确实需要公开整个类。 -
@LinusGeffarth 正如提案中所说,它可能会不必要地增加二进制文件的大小,并且动态链接会花费更长的时间。我真的不认为对于从 Obj-C 中使用的特定事物特别意味着增加的清晰度来说太麻烦了。
-
试过了,不行。