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

Hug*_*nso 17 uiviewcontroller ios swift ios8

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

extension UIViewController{
  public override func viewWillAppear(){
    super.viewWillAppear()
    //do some stuff
 }
}
Run Code Online (Sandbox Code Playgroud)

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

  • viewDidLoad中
  • viewWillLoad
  • viewWillAppear中
  • viewDidAppear

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

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

我在XCode 6.3中使用swift 1.2

Ant*_*nio 22

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

class MyClass {
    func myFunc() {}
}

extension MyClass {
    override func myFunc() {}
}
Run Code Online (Sandbox Code Playgroud)

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

更新

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

另一个是方法调配 - 我从来没有使用过它所以我不想向你提供不准确的信息.也许值得阅读Nate Cook的这篇文章,顺便提一下,这是一个替换的例子viewWillAppear.