通过swift中的枚举值来排序对象数组

Alp*_*per 3 sorting xcode swift

我有一个CLBeacon对象数组,它们都有一个属性.proximity.

我想通过包含CLProximity枚举的属性对数组进行排序.所以我希望所有对象都是立即,接近,远,未知.

有没有办法在不诉诸一堆if语句的情况下巧妙地做到这一点?

Mar*_*n R 14

如果定义(计算只读)属性sortIndexCLProximity

extension CLProximity {
    var sortIndex : Int {
        switch self {
        case .Immediate:
            return 0
        case .Near:
            return 1
        case .Far:
            return 2
        case .Unknown:
            return 3
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以用一组信标排序

let sortedBeacons = sorted(beacons) { $0.proximity.sortIndex < $1.proximity.sortIndex }
Run Code Online (Sandbox Code Playgroud)

如果.Unknown是唯一CLProximity需要"特殊处理"的值,并且所有其他可能的值都是所需的相对顺序,那么您可以将属性定义简化为

extension CLProximity {
    var sortIndex : Int {
        return self == .Unknown ? Int.max : rawValue
    }
}
Run Code Online (Sandbox Code Playgroud)