Swift #selector 引用 Objective-C 方法

Swift #selector referencing to an Objective-C method

由于可以在 swift 2.2 版本中得出结论,因此可以通过 #selector 引用 Objective-C 方法。

let sel = #selector(UIView.insertSubview(_:at:)) // produces the Selector "insertSubview:atIndex:"

所以之前我们使用像简单字符串这样的方法名称:"doBangBang" 并将其称为 Selector("doBangBang") 现在我们应该像引用方法 MyClass.doBangBang() 一样使用它并使用关键词#selector(MyClass.doBangBang())?此功能是否弃用 Selector?除了减少使用错误名称执行的功能的数量之外,这种改进还有什么好处?

此功能有效地弃用了 Selector("methodName") 以及仅对选择器使用 "methodName""methodName:"

主要的好处是您不能再在方法字符串中输入错误,正如您在问题中已经说明的那样。

想象一个带有选择器的方法:

..., selector: "myMethod:")

输入错误会怎样?

..., selector: "mymethod:")

它崩溃了。

新系统是类型安全的:编译器可以检查您调用的方法是否确实存在 - 不再有错别字,不再调用不存在的函数:

..., selector: #selector(myMethod))

因为编译器可以检查类型。我们还从 Xcode 获得自动建议和自动完成以及类型安全操作带来的所有细节。