如何在viewController中调用扩展函数

时间:2018-03-11 15:51:45

标签: ios iphone swift

扩展名中的

func1无法访问viewController中的func2。有没有办法让这成为可能?

func func2() {
   // do something
}

}  //<-- View controller ends here

extension UIViewController {


func func1(){
    func2()
}

2 个答案:

答案 0 :(得分:2)

我猜你有错误或错字,你正在延长UIViewController而不是ViewController,检查你的意思是否有效,它有效:

class ViewController: UIViewController {
    func func2() {
        print("I am being called")
    }
}

extension ViewController {
    func func1(){
        func2()
    }
}

<强>用法

let vc = ViewController()
vc.func1() // Outputs "I am being called"

示例2 UIViewController的扩展名):

extension UIViewController {
    func func1(){
        if let viewController = self as? ViewController {
            viewController.func2()
        }
    }
}

<强>用法

let vc = ViewController()
vc.func1() // Outputs "I am being called"

答案 1 :(得分:0)

您无法在UIViewController扩展名中使用UIViewController子类的方法,这是合乎逻辑的。由于func2是自定义视图控制器的一种方法,因此我猜它是一个ViewController实例。

您应该扩展ViewController,而不是UIViewController

但如果您的目标是延长UIViewController,那么它将无法实现。

希望它有所帮助。

更新:感谢@Cristik:您实际上可以通过这种方式使用扩展方法:

(self as? ViewController)?.func2()

UPDATE2:

以下是代码:

enter image description here

请注意func1 MyCustomViewController仅适用于MyCustomViewController func2 li class Header extends Component { render() { return ( <div> <div class="navbar-fixed"> <nav className="navbar"> <div className="nav-wrapper"> <a href="#" className="brand-logo">Udacity Logo</a> <ul id="nav-mobile" className="right hide-on-med-and-down"> <li><a href="#">Nanodegree</a></li> <li><a href="#">Hire Talent</a></li> <li><a href="#">For Business</a></li> <li><a className="waves-effect waves-light btn findbtn">Course Finder</a></li> </ul> </div> </nav> </div> </div> ); } } 方法

}

对于屏幕截图,很抱歉格式化了。