具有可比原始值的Swift枚举是否可以自动合成可比协议实现?
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
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.rawValue
k)
将
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)