func1无法访问viewController中的func2。有没有办法让这成为可能?
func func2() {
// do something
}
} //<-- View controller ends here
extension UIViewController {
func func1(){
func2()
}
答案 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:
以下是代码:
请注意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>
);
}
}
方法
对于屏幕截图,很抱歉格式化了。