在下面的片段中,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)
}
它建议您使用Swift2.2新的#selector,因为它的类型安全性更高,因为您不能对不存在的方法进行选择器引用,而使用选择器(String)则可以引用不存在的方法。
使用#selector
现在是Swift中引用选择器的正确方法。不推荐使用结构选择器
和字符串文字作为选择器,如“mysel:”
。
新的#selector
现在是类型安全的,允许编译器检查和自动完成您传入的选择器。这修复了一个非常常见的错误,即选择器中的拼写错误(在字符串文本的情况下)
发生这种情况的原因是现在不推荐使用string字面构造选择器,并将在Swift3.0中删除
随着#selector语法的引入,我们应该不推荐使用字符串文字来形成选择器。理想情况下,我们可以在Swift2.2中执行弃用,并从Swift3中完全删除语法。
您可以在https://github.com/apple/swift-evolution/blob/master/proposals/0022-objc-selectors.md中了解更多有关此更改的详细信息