Mensaje de error de conformidad redundante Swift 2

Actualicé mi proyecto a Swift 2 y recibí un montón de redundant conformance of XXX to protocol YYY . Esto sucede especialmente a menudo (o siempre) cuando una clase se ajusta a CustomStringConvertible . También algún lugar con Equatable .

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

Sospecho que no necesito cumplir explícitamente con un protocolo cuando implemente la var description: String { get } , o los métodos que requiera el protocolo. ¿Debo seguir las instrucciones de Fixit y eliminar todo esto? ¿Swift ahora automáticamente infiere la conformidad si una clase implementa todos los métodos del protocolo?

Obtendrá ese mensaje de error en Xcode 7 (Swift 2) si una subclase declara conformidad con un protocolo que ya está heredado de una superclase. Ejemplo:

 class MyClass : CustomStringConvertible { var description: String { return "MyClass" } } class Subclass : MyClass, CustomStringConvertible { override var description: String { return "Subclass" } } 

El registro de errores muestra:

 main.swift: 10: 27: error: conformidad redundante de 'Subclase' con el protocolo 'CustomStringConvertible'
 Clase Subclase: MyClass, CustomStringConvertible {
                           ^
 main.swift: 10: 7: nota: 'Subclase' hereda la conformidad con el protocolo 'CustomStringConvertible' de la superclase aquí
 Clase Subclase: MyClass, CustomStringConvertible {
       ^

Eliminar el cumplimiento del protocolo de la statement de la subclase resuelve el problema:

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

Pero la superclase debe declarar la conformidad explícitamente, no se deduce automáticamente de la existencia de la propiedad de description .

Para los googlers, también obtuve este error cuando incluí SwiftyJson en mi objective Tests y agregué una clase de prueba rápida, ya que provocó que SwiftyJson se comstackra de nuevo, y declara NSNumber como Comparable. La solución fue incluirlo solo en el objective de la aplicación.

El punto es que GraphFeatureNumbersetRange es la subclase de NSObject . ¡Lo cual a su vez ya se ajusta a CustomStringConvertible ! ¡Eso es! Simplemente borre este protocolo redundante. ¡Ahora lo declaras dos veces! 🙂