Следующий код (компилируется без ошибок) возвращает индекс элемента в конкретном типе перечисления CaseIterable
public enum MyEnum : CaseIterable {
case ONE, TWO, THREE
public func ordinal() -> Int? {
return MyEnum.allCases.firstIndex(of: self)
}
}
Я хочу создать универсальную функцию для работы со всеми перечислениями CaseIterable.
Если я попытаюсь:
public extension CaseIterable {
public func ordinal() -> Int? {
return CaseIterable.allCases.firstIndex(of: self)
}
}
Я получу ошибку компилятора "Member 'allCases' cannot be used on value of protocol type 'CaseIterable'; use a generic constraint instead
", что вполне логично, поскольку фактический тип перечисления неизвестен ".
Когда я пытаюсь CaseIterable<T>
, Я получаю еще одну ошибку, так как CaseIterable не объявлен как универсальный тип.
Есть ли способ?