本文介绍了在Swift 3中使用Selector的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

限时删除!!

我在Swift 3中编写我的iOS应用程序。

I am writing my iOS Application in Swift 3.

我有一个 UIViewController 扩展,我有检查控制器实例是否响应方法。下面是我尝试的代码。

I have a UIViewController extension, where I have to check if the controller instance responds to a method. Below is the code that I a trying out.

extension UIViewController {
func myMethod() {
    if self.responds(to: #selector(someMethod)) {

    }
}}

这里响应(to:)方法抛出编译时错误

Here the responds(to:) method throws a compile time error

使用未解析的标识符someMethod。

我在另一篇文章中读到,我们必须在选择器内使用 self 参数,但即使这会引发一些错误。

I read in another post, we have to use self inside the selector argument, but even that is throwing some error.

推荐答案

一个简单的解决方法:

@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?()
            //...
        }
    }
}






多一点Swifty方式:


A little more Swifty way:

protocol SomeMethodType {
    func someMethod()
}
//For all classes implementing `someMethod()`.
extension MyViewController: SomeMethodType {}
//...
extension UIViewController {
    func myMethod() {
        if let someMethodSelf = self as? SomeMethodType {
            //...
            someMethodSelf.someMethod()
            //...
        }
    }
}

这篇关于在Swift 3中使用Selector的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

1403页,肝出来的..

09-06 15:34