我有一个枚举,我试图对其进行排序,以给出顺序A、B、C、D等。原始值与此顺序不对应。因此,在swift 4.2中,向caseiteable添加一致性意味着basepitch.allcases为我提供了一个[basepitch]数组,但是如果我尝试
x=basepitchs.allcases.sorted()我得到错误:
实例成员“sorted”不能用于类型“[basepitchs]”。这是真的,即使我使它具有可比性,并添加我自己的可比函数来比较案例名称的字符串(而不是使用会给我错误顺序的原始值)。有人能帮忙吗?谢谢
enum BasePitches: Int, CaseIterable, Comparable {
case C = 0
case D = 2
case E = 4
case F = 5
case G = 7
case A = 9
case B = 11
// Implement Comparable
public static func < (lhs: BasePitches, rhs: BasePitches) -> Bool {
return String(describing: lhs) < String(describing: rhs)
}
}
最佳答案
替换:
BasePitches.AllCases.sorted()
用:
BasePitches.allCases.sorted()
你的代码99%正确。只是
AllCases
引用的集合类型表示枚举的所有情况。您需要的是静态计算变量,allCases
(小写a
)。public protocol CaseIterable {
/// A type that can represent a collection of all values of this type.
associatedtype AllCases : Collection where Self.AllCases.Element == Self
/// A collection of all values of this type.
public static var allCases: Self.AllCases { get }
}