Swift #selector引用Objective-C方法

时间:2016-03-15 09:21:04

标签: swift xcode7.3

有可能在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?除了减少使用错误名称执行的函数数量之外,这些改进还有什么好处?

1 个答案:

答案 0 :(得分:2)

此功能使用Selector("methodName")有效地弃用,并且仅使用"methodName""methodName:"作为选择器。

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

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

..., selector: "myMethod:")

当你输入错误时会发生什么?

..., selector: "mymethod:")

它崩溃了。

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

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

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