64

私は拡張機能を持っています:

public extension UIWindow {
    override public func topMostController()->UIViewController? { ... }
}

しかし、私topMostControllerの場合、次のエラーが発生します:

Declarations in extensions cannot override yet error

Swift 3.1 では問題なく動作しますが、Swift 4 ではこのエラーが発生します。どうすれば修正できますか?Swift 4 で何が変更されましたか?

4

3 に答える 3

12

拡張機能は、型に新しい機能を追加できますが、既存の機能をオーバーライドすることはできません。

拡張機能は、既存のクラス、構造体、列挙型、またはプロトコル型に新しい機能を追加します。これには、元のソース コードにアクセスできない型を拡張する機能 (遡及モデリングと呼ばれる) が含まれます。

Swift の拡張機能は次のことができます。

  • 計算されたインスタンス プロパティと計算された型のプロパティを追加する
  • インスタンスメソッドと型メソッドを定義する
  • 新しい初期化子を提供する
  • 添え字を定義する
  • 新しいネストされた型を定義して使用する
  • 既存の型をプロトコルに準拠させる

Apple 開発者ガイド

あなたがやろうとしているのは、このコードで行われることと似ています:

class MyClass: UIWindow {
    func myFunc() {}
}

extension MyClass {
    override func myFunc() {}
}

注:override topMostController()その後、サブクラスを作成したい場合UIWindow

于 2017-08-02T10:09:19.727 に答える