2017-09-06 1 views
1

Je ne comprends pas, pourquoi dans certains cas j'ai eu une erreur "Déclarations dans les extensions ne peut pas remplacer" et dans d'autres cas - pas.Étrange erreur "Déclarations dans les extensions ne peut pas remplacer"

code:

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 
} 

Pourquoi je peux overide un tableau et ne peut pas remplacer un tableau de optionals?

+0

Peut-être une duplication de https://stackoverflow.com/questions/34061246/override-function-error-in-swift – XmasRights

Répondre

1

Vous ne pouvez pas remplacer une variable ou une fonction que vous avez ajoutée à la classe de base à l'aide d'une extension. Cela pourrait devenir possible dans une future version de Swift.

Le compilateur peut vous désactiver avec des types Objective-C purs (ou pontés), mais dès que vous utilisez un type Swift (par exemple un Optional ou un Enum, etc.), vous obtenez une erreur de compilation.