具有可比原始值的Swift枚举是否可以自动合成可比协议实现?

具有可比原始值的Swift枚举是否可以自动合成可比协议实现?,swift,Swift,Swift可以自动合成结构和枚举的equalable实现。同样,我想让枚举也自动符合compariable协议 这就是我所做的: enum RoyalRank: UInt8 { case emperor = 3 case king = 2 case duke = 1 } let e = RoyalRank.emperor let k = RoyalRank.king print(e > k) 但是,它当然不会编译。我得到了以下错误: error: cannot

Swift可以自动合成结构和枚举的
equalable
实现。同样,我想让枚举也自动符合
compariable
协议

这就是我所做的:

enum RoyalRank: UInt8 { 
  case emperor = 3
  case king    = 2
  case duke    = 1
}

let e = RoyalRank.emperor
let k = RoyalRank.king
print(e > k)
但是,它当然不会编译。我得到了以下错误:

error: cannot convert value of type 'RoyalRank' to expected argument type 'UInt8'
print(e > k)
      ^
       .rawValue

有什么方法可以使枚举自动符合
可比较的
协议吗?

当其关联的codeRawValue/code为CodeCompatible/code:/p时,您只需要为codeRawRepresentable/code提供
Bool{
返回lhs.rawValuek)

Comparable
添加到您的
enum
,瞧

根据定义,如果您需要执行某些操作以使其符合
可比性
,则它不是自动执行的。如果不做任何事情,它不符合
可比性
,这意味着它不可能自动符合
可比性
@Sweeper。OP可能意味着类似于结构的合成
可平衡性
一致性的行为。一种协议扩展,所有
可表示的
枚举都隐式符合
可比较的
。但这是对的,Swift不这样做,你必须这样做。这里有一个通用的解决方案:(有条件地扩展RawRepresentable协议)。是否有可能扩展
RawRepresentable
,并让它在
RawValue
可比时自动符合
Comparable
?不幸的是没有,您不能自动拥有它,您必须始终声明一个类型
Comparable
。唯一的好处是您不必编写任何其他代码行。
extension RawRepresentable where RawValue : Comparable {
    static func < (lhs: Self, rhs: Self) -> Bool {
        return lhs.rawValue < rhs.rawValue
    }
}

enum RoyalRank: UInt8, Comparable {
    case emperor = 3
    case king    = 2
    case duke    = 1
}


let e = RoyalRank.emperor
let k = RoyalRank.king
print(e > k)