冗余一致性错误消息Swift 2

时间:2015-06-16 12:43:49

标签: xcode swift

我将我的项目更新为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现在会自动推断出一致性吗?

3 个答案:

答案 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 !那就是它!只需删除此冗余协议即可。现在你要两次宣布它! : - )