由于可以在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 获得自动建议和自动完成功能,以及类型安全操作附带的所有细节。