Передайте и распечатайте все дела в перечислении в Swift - PullRequest
1 голос
/ 02 июля 2019

Рассмотрим это простое перечисление:

enum myEnum: String {
    case abc = "ABC"
    case xyz = "XYZ"
}

Я хочу написать функцию, которая может печатать все дела в перечислении.Как ..

printEnumCases(myEnum)

Ожидаемый результат:

ABC
XYZ

Примечание. Я могу выполнить итерацию перечисления, например this .Но я не знаю, как передать перечисление.

Ответы [ 2 ]

4 голосов
/ 02 июля 2019

Вы можете определить универсальную функцию, которая принимает тип в качестве аргумента, равный CaseIterable и RawRepresentable:

func printEnumCases<T>(_: T.Type) where T: CaseIterable & RawRepresentable {
    for c in T.allCases {
        print(c.rawValue)
    }
}

Использование:

enum MyEnum: String, CaseIterable {
    case abc = "ABC"
    case xyz = "XYZ"
}

printEnumCases(MyEnum.self)
0 голосов
/ 02 июля 2019

Приведите ваше enum в соответствие CaseIterable, и тогда вы сможете использовать .allCases.

enum myEnum: String, CaseIterable {
    case abc = "ABC"
    case xyz = "XYZ"
}

myEnum.allCases.forEach { x -> print(x.rawValue) }

CaseIterable docs

...