IViewControllerの拡張機能を実装しようとしているときに、通常の方法がないか、またはICollectionViewControllerおよび- ITableViewController):
extension UIViewController{
public override func viewWillAppear(){
super.viewWillAppear()
//do some stuff
}
}
通常の方法がないか、この関数をオーバーライドすることが許可されていないことを理解しています(たとえICollectionViewControllerおよびITableViewControllerで使用できる場合でも)。
これを行う方法はありますか?私はそこにいくつかの実装を用意し、すべてのIViewControllerをアプリで機能させたいと思っています...すべて1か所で。
しないでください UIViewControllerをサブクラス化する新しいクラスを作成し、それらのメソッドをオーバーライドして、コントローラーでそれを拡張することに注意してください。これは明白で最も簡単な解決策ですが、これは私がやろうとしていることを満たしていません。
XCode 6.3でSwift 1.2を使用しています。
あなたがやろうとしていることは、このコードによって行われていることと似ています:
class MyClass {
func myFunc() {}
}
extension MyClass {
override func myFunc() {}
}
オーバーライドしようとしている4つのメソッドは、スーパークラスの1つではなく、UIViewController
で定義されています。また、同じクラスで定義されているメソッドをオーバーライドすることはできません。
更新
私は問題を解決する2つの異なる方法を考えることができます-1つ目は、望まない方法です(UIViewController
をサブクラス化する)。
もう1つはメソッドのスウィズリングです。これを使用したことがないので、不正確な情報を提供したくありません。多分それは読む価値があります この記事 Nate Cookが偶然viewWillAppear
を置き換える例を示しています。