在下面的代码片段中,Xcode推荐“使用#selector而不是显式构建选择器”的原因是什么?
// addButton = UIBarButtonItem.init(barButtonSystemItem: UIBarButtonSystemItem.Add,
// target: self, action: #selector(FoldersMaintenanceVC.addButtonPressed))
addButton = UIBarButtonItem.init(barButtonSystemItem: UIBarButtonSystemItem.Add,
target: self, action: Selector("addButtonPressed"))
self.navigationItem.leftBarButtonItem = addButton
func addButtonPressed()
{
myNslogSys2(self, funcName:#function)
}
答案 0 :(得分:9)
它建议您使用Swift 2.2 new #selector,因为它更加类型安全,因为您不能对不存在的方法进行选择器引用,而使用Selector(String),您可以引用不存在的方法。
答案 1 :(得分:5)
使用#selector
现在是Swift引用选择器的正确方法。不推荐使用结构Selector
和字符串文字用于选择器,例如"mySel:"
。
新的#selector
现在是类型安全的,允许编译器检查和自动完成您传入的选择器。这修复了选择器中拼写错误的常见错误(在这种情况下)字符串文字)
答案 2 :(得分:1)
它发生了因为现在不推荐使用字符串文字构造Selector,并且将在Swift 3.0中删除
随着#selector语法的引入,我们应该弃用 使用字符串文字来形成选择器。理想情况下,我们可以执行 Swift 2.2中的弃用并完全从Swift中删除语法 3。
您可以在https://github.com/apple/swift-evolution/blob/master/proposals/0022-objc-selectors.md
了解有关此更改的更多详细信息