使用#selector而不是显式构造Selector

时间:2016-03-24 15:19:34

标签: xcode swift

在下面的代码片段中,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)
}

3 个答案:

答案 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

了解有关此更改的更多详细信息