Как я могу использовать перечисление Swift в качестве ключа словаря? (В соответствии с равными)

Я определил перечисление, чтобы представить выборку «станции»; Станции определяются уникальным положительным целым числом, поэтому я создал следующее перечисление, чтобы позволить отрицательным значениям представлять особый выбор:

enum StationSelector : Printable {
    case Nearest
    case LastShown
    case List
    case Specific(Int)

    func toInt() -> Int {
        switch self {
        case .Nearest:
            return -1
        case .LastShown:
            return -2
        case .List:
            return -3
        case .Specific(let stationNum):
            return stationNum
        }
    }

    static func fromInt(value:Int) -> StationSelector? {
        if value > 0 {
            return StationSelector.Specific(value)
        }
        switch value {
        case -1:
            return StationSelector.Nearest
        case -2:
            return StationSelector.LastShown
        case -3:
            return StationSelector.List
        default:
            return nil
        }
    }

    var description: String {
    get {
        switch self {
        case .Nearest:
            return "Nearest Station"
        case .LastShown:
            return "Last Displayed Station"
        case .List:
            return "Station List"
        case .Specific(let stationNumber):
            return "Station #\(stationNumber)"
        }
    }
    }
}

Я хотел бы использовать эти значения в качестве ключей в словаре. Объявление словаря приводит к ожидаемой ошибке, которую StationSelector не соответствует Hashable. Соответствовать Hashable легко с помощью простой хеш-функции:

var hashValue: Int {
get {
    return self.toInt()
}
}

Тем не мение,Hashable требует соответствияEquatable, и я не могу определить оператор равенства в моем перечислении, чтобы удовлетворить компилятор.

func == (lhs: StationSelector, rhs: StationSelector) -> Bool {
    return lhs.toInt() == rhs.toInt()
}

Компилятор жалуется, что это две декларации в одной строке, и хочет поставить; послеfunc, что тоже не имеет смысла.

Какие-нибудь мысли?

Ответы на вопрос(4)

Ваш ответ на вопрос