一尘不染

冗余一致性错误消息Swift 2

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现在会自动推断出一致性吗?


阅读 567

收藏
2020-07-07

共1个答案

一尘不染

如果子类声明符合已经从超类继承的协议,则将在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:错误:“子类”与协议“ CustomStringConvertible”的冗余一致性
类子类:MyClass,CustomStringConvertible {
                          ^
main.swift:10:7:注意:“子类”从此处继承超类对协议“ CustomStringConvertible”的一致性
类子类:MyClass,CustomStringConvertible {
      ^

从子类声明中删除协议一致性解决了以下问题:

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

但是超类必须显式声明一致性,这不是从description 属性的存在自动推断出来的。

2020-07-07