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