我正在用 Swift 3 编写我的 iOS 应用程序。
我有一个UIViewController
扩展,我必须检查控制器实例是否响应方法。下面是我尝试的代码。
extension UIViewController {
func myMethod() {
if self.responds(to: #selector(someMethod)) {
}
}}
这里的responds(to:)
方法抛出编译时错误
使用未解析的标识符“someMethod”。
我在另一篇文章中读到,我们必须使用self
在选择器参数内,但即使这样也会引发一些错误。
一个简单的解决方法:
@objc protocol SomeMethodType {
func someMethod()
}
extension UIViewController {
func myMethod() {
if self.responds(to: #selector(SomeMethodType.someMethod)) {
//...
self.perform(#selector(SomeMethodType.someMethod))
// or
(self as AnyObject).someMethod?()
//...
}
}
}
更快速的方式:
protocol SomeMethodType {
func someMethod()
}
//For all classes implementing `someMethod()`.
extension MyViewController: SomeMethodType {}
//...
extension UIViewController {
func myMethod() {
if let someMethodSelf = self as? SomeMethodType {
//...
someMethodSelf.someMethod()
//...
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)