2017-09-06 6 views
1

私は理解できません。なぜ「拡張の宣言は上書きできません。奇妙なエラー「拡張の宣言は上書きできません」

コード:

protocol ConstrTest { 
    var goodConstraints: [NSLayoutConstraint] {get} 
    var badConstraints: [NSLayoutConstraint?] {get} 
} 

extension UIViewController: ConstrTest 
{ 
    var goodConstraints: [NSLayoutConstraint] { 
     return [] 
    } 

    var badConstraints: [NSLayoutConstraint?] { 
     return [] 
    } 
} 

class TestViewController: UIViewController { 
    override var goodConstraints: [NSLayoutConstraint] { 
     return [] 
    } //No errors and it works 

    override var badConstraints: [NSLayoutConstraint?] { 
     return [] 
    } //Got error Declarations in extensions cannot override 
} 

私は配列をオーバライドすることができますし、optionals配列を上書きすることはできませんなぜ?

+0

おそらくhttps://stackoverflow.com/questions/34061246/override-function-error-in-swiftの重複 – XmasRights

答えて

1

拡張を使用して基本クラスに追加した変数または関数を上書きすることはできません。これはSwiftの将来のバージョンで可能になるかもしれません。

コンパイラでは、Objective-Cの純粋な(またはブリッジされた)タイプを使用できますが、Swiftタイプ(たとえば、オプションまたは列挙型など)を使用するとすぐにコンパイルエラーが発生します。

関連する問題