Message d’erreur de conformité redondante Swift 2

J’ai mis à jour mon projet à Swift 2 et j’ai reçu un tas de redundant conformance of XXX to protocol YYY . Cela se produit particulièrement souvent (ou toujours) lorsqu’une classe est conforme à CustomSsortingngConvertible . Aussi un endroit avec Equatable .

 class GraphFeatureNumbersetRange: GraphFeature, CustomSsortingngConvertible { // <--- get the error here ... } 

Je soupçonne que je n’ai pas besoin de me conformer explicitement à un protocole lorsque j’implémente var description: Ssortingng { get } , ou quelles que soient les méthodes requirejses par le protocole. Dois-je simplement suivre les instructions de fixit et supprimer tout cela? Est-ce que Swift déduit maintenant automatiquement la conformité si une classe implémente toutes les méthodes du protocole?

Vous obtiendrez ce message d’erreur dans Xcode 7 (Swift 2) si une sous-classe déclare la conformité à un protocole déjà hérité d’une super-classe. Exemple:

 class MyClass : CustomSsortingngConvertible { var description: Ssortingng { return "MyClass" } } class Subclass : MyClass, CustomSsortingngConvertible { override var description: Ssortingng { return "Subclass" } } 

Le journal des erreurs indique:

 main.swift: 10: 27: erreur: conformité redondante de la sous-classe au protocole 'CustomSsortingngConvertible'
 class Subclass: MyClass, CustomSsortingngConvertible {
                           ^
 main.swift: 10: 7: note: 'Sous-classe' hérite de la conformité au protocole 'CustomSsortingngConvertible' de la superclasse ici
 class Subclass: MyClass, CustomSsortingngConvertible {
       ^

La suppression de la conformité du protocole à la déclaration de la sous-classe résout le problème:

 class Subclass : MyClass { override var description: Ssortingng { return "Subclass" } } 

Mais la super-classe doit déclarer explicitement la conformité, elle n’est pas automatiquement déduite de l’existence de la propriété description .

Pour les utilisateurs de Google, j’ai également eu cette erreur en incluant SwiftyJson dans ma cible Tests et en ajoutant une classe de test rapide, car cela entraînait la compilation de SwiftyJson et déclarait NSNumber Comparable. La solution consistait uniquement à l’inclure dans la cible de l’application.

Le fait est que votre GraphFeatureNumbersetRange est la sous classe de NSObject . Qui à son tour est déjà conforme à CustomSsortingngConvertible ! C’est tout! Supprimez simplement ce protocole redondant. Maintenant, vous le déclarez deux fois! 🙂