32 votes

.dynamicType est obsolète. Utilisez plutôt 'type(of ...)'.

Je viens d'effectuer une mise à jour vers Xcode 8 et iOS 10 (en utilisant l'ancienne version du langage Swift).

Essayer de compiler à nouveau mon projet a été une agonie, même en utilisant l'ancienne syntaxe Swift. Cette fois, une de mes fonctions utilise NSBundle(forClass: self.dynamicType) mais il apparaît maintenant que .dynamicType est déprécié et Xcode ne veut même pas le compiler.

Sa suggestion est d'utiliser type(of: self) mais ça ne marche pas non plus. Quelqu'un connaît-il la solution ? Merci.

34voto

dfri Points 11222

(Ci-dessous vaut pour Swift 3; pas d'héritage Swift Version en Langue (2.3), cependant, afin de ne pas répondre à l'OP de la question, mais pourrait être utile pour la Swift 3 utilisateurs, néanmoins)

Comme mentionné dans votre question, dynamicType est maintenant (Swift 3) sont obsolètes en faveur de l' type(of:). En outre:

  • NSBundle a été renommé Bundle.
  • L' init(forClass:) initialiseur d' Bundle a été renommé init(for:).

Compte tenu de ces changements, Pour Swift 3 initialisation (ou à chercher une instance existante associée à la classe spécifique) votre Bundle objet de la manière suivante:

class Foo {
    func bar() -> () {
        let bundle = Bundle(for: type(of: self))
        // ...
    }
}

1voto

Rodrigo Points 311

La réponse de @dfri fonctionne parfaitement pour Swift 3.

En ce qui concerne Swift 2.3, ma solution a été de nettoyer Xcode (Command+Option+Shift+K) et de supprimer tout ce qui se trouve dans ~/Library/Developer/Xcode/DerivedData . Le problème ne disparaît pas instantanément, mais après un certain temps, il cesse de donner cette erreur.

C'est peut-être un bug, après tout nous sommes en 8.0. J'espère qu'il sera corrigé dans les prochaines versions.

Merci à tous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X