我将我的项目更新为Swift 2,并收到了一堆redundant conformance of XXX to protocol YYY
。当一个类符合CustomStringConvertible
时,这种情况经常(或总是)发生。也是Equatable
的一些地方。
class GraphFeatureNumbersetRange: GraphFeature, CustomStringConvertible { // <--- get the error here
...
}
我怀疑在实施var description: String { get }
或协议要求的任何方法时,我都不需要明确地遵守协议。我应该遵循fixit说明并删除所有这些吗?如果一个类实现了所有协议的方法,Swift现在会自动推断出一致性吗?
答案 0 :(得分:90)
如果子类声明符合性,您将在Xcode 7(Swift 2)中收到该错误消息 到已经从超类继承的协议。例如:
class MyClass : CustomStringConvertible {
var description: String { return "MyClass" }
}
class Subclass : MyClass, CustomStringConvertible {
override var description: String { return "Subclass" }
}
错误日志显示:
main.swift:10:27: error: redundant conformance of 'Subclass' to protocol 'CustomStringConvertible' class Subclass : MyClass, CustomStringConvertible { ^ main.swift:10:7: note: 'Subclass' inherits conformance to protocol 'CustomStringConvertible' from superclass here class Subclass : MyClass, CustomStringConvertible { ^
从子类声明中删除协议一致性 解决了这个问题:
class Subclass : MyClass {
override var description: String { return "Subclass" }
}
但超类必须明确声明一致性,它是
不是从description
的存在中自动推断出来的
属性。
答案 1 :(得分:6)
对于googlers,当我在Tests目标中包含SwiftyJson并添加一个swift测试类时,我也遇到了这个错误,因为它导致SwiftyJson再次被编译,并且它将NSNumber声明为Comparable。解决方案是仅将其包含在应用目标中。
答案 2 :(得分:1)
关键是你的GraphFeatureNumbersetRange是 NSObject 的子类。 反过来已经 符合到 CustomStringConvertible !那就是它!只需删除此冗余协议即可。现在你要两次宣布它! : - )