我有一个枚举,我试图对其进行排序,以给出顺序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 }
}

09-25 19:24