首页 文章

UIViewController扩展不允许在Swift中覆盖与视图相关的函数?

提问于
浏览
12

在尝试实现 UIViewController 的扩展时,我意识到没有正常的方法,或者不允许覆盖这些函数(即使它们可用于 UICollectionViewControllerUITableViewController ):

extension UIViewController{
  public override func viewWillAppear(){
    super.viewWillAppear()
    //do some stuff
 }
}

我意识到没有正常的方法,或者不允许覆盖这些功能(即使它们可用于 UICollectionViewControllerUITableViewController ):

  • viewDidLoad

  • viewWillLoad

  • viewWillAppear

  • viewDidAppear

有一些方法可以做到这一点?我希望在那里有一些实现,并在我的应用程序上为每个 UIViewController 工作......所有这些只在一个地方 .

请注意,我不想创建一个新类继承UIViewController,重写这些方法并让我的控制器扩展它 . 这是一个显而易见且最简单的解决方案,但这并不能满足我的目标 . 我在XCode 6.3中使用swift 1.2

1 回答

  • 17

    您要做的是与此代码所做的类似:

    class MyClass {
        func myFunc() {}
    }
    
    extension MyClass {
        override func myFunc() {}
    }
    

    您尝试覆盖的4个方法在 UIViewController 中定义,而不是在其超类之一中定义 . 并且您不能覆盖在同一个类中定义的方法 .

    Update

    我可以想出两种不同的方法来解决问题 - 第一种是你不想要的方法(子类化 UIViewController ) .

    另一个是方法调整 - 我从来没有使用它所以我不值得阅读this article由Nate Cook,其顺便提供了一个替换 viewWillAppear 的例子 .

相关问题