首页 > 解决方案 > 尝试从手册编译 Swift 代码时出现错误:“类型不符合协议‘Comparable’”

问题描述

我从Swift - Protocols 手册页尝试了以下示例,但出现编译器错误:

error: type 'SkillLevel' does not conform to protocol 'Comparable'

enum SkillLevel: Comparable {
    case beginner
    case intermediate
    case expert(stars: Int)
}
var levels = [SkillLevel.intermediate, SkillLevel.beginner,
              SkillLevel.expert(stars: 5), SkillLevel.expert(stars: 3)]
for level in levels.sorted() {
    print(level)
}

Xcode 建议添加以下函数以使其符合 Comparable:

static func < (lhs: SkillLevel, rhs: SkillLevel) -> Bool {
    <#code#>
}

从手册:

Swift 为没有原始值的枚举提供了 Comparable 的综合实现。如果枚举具有关联类型,则它们必须都符合 Comparable 协议。要接收 < 的综合实现,请在包含原始枚举声明的文件中声明与 Comparable 的一致性,而无需自己实现 < 运算符。Comparable 协议的默认实现 <=、> 和 >= 提供了剩余的比较运算符。

我不确定上面代码中的枚举是否有原始值,但如果没有,代码不应该在没有实现函数“<”的情况下编译吗?

标签: swift

解决方案


如果您有类似于普通 C 枚举的内容,则自动生成 < 运算符会起作用;只是案例,没有别的。但是这里其中一种情况具有关联的类型,因此编译器不想猜测您希望值如何排序。


推荐阅读