我将项目更新为Swift 2,并收到了很多redundant conformance of XXX to protocol YYY。当类符合时,这种情况尤其经常发生(或总是发生)CustomStringConvertible。也有一些地方Equatable。
redundant conformance of XXX to protocol YYY
CustomStringConvertible
Equatable
class GraphFeatureNumbersetRange: GraphFeature, CustomStringConvertible { // <--- get the error here ... }
我怀疑在实现var description: String { get }或协议需要的任何方法时,我不需要显式地遵循协议。我是否应该按照fixit指示并删除所有这些指示?如果一个类实现了所有协议的方法,Swift现在会自动推断出一致性吗?
var description: String { get }
如果子类声明符合已经从超类继承的协议,则将在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 属性的存在自动推断出来的。
description