Как я могу получить количество перечислений Swift?

Ответы:

173

Начиная с Swift 4.2 (Xcode 10) вы можете объявить о соответствии CaseIterableпротоколу, это работает для всех перечислений без связанных значений:

enum Stuff: CaseIterable {
    case first
    case second
    case third
    case forth
}

Количество случаев теперь просто получается с

print(Stuff.allCases.count) // 4

Для получения дополнительной информации см.

Мартин Р
источник
1
В последней версии swift его ошибка «Тип DAFFlow» не соответствует протоколу «RawRepresentable». Почему это заставляет меня следовать этому? Любая идея?
Сатьям
@Satyam: Что такое DAFFlow?
Мартин Р
извините, я забыл упомянуть, что "DAFFlow" - это простое перечисление, которое не наследуется ни от какого другого протокола.
Satyam
1
Это лучшее решение, но только для ясности - разработчики Apple смогут начать использовать его только после того, как Xcode 10 (и, следовательно, Swift 4.2) выйдет из бета-версии (скорее всего, около 14 сентября 2018 года).
JosephH
1
@DaniSpringer: подробности вы найдете на github.com/apple/swift-evolution/blob/master/proposals/… . Но обычно вам не нужен этот тип явно из-за автоматического вывода типа компилятора.
Мартин Р