Преобразовать массив перечислений в массив представительных строк - PullRequest
2 голосов
/ 17 октября 2019

Мне нужен метод расширения Array (или Set), который может быстро преобразовать массив значений Enum: String в массив его фактических значений String. Как бы я поступил об этом?

Например, у меня есть:

enum Scope: String
{
    case appPrivate = "app-private"
    case appLimited = "app-limited"
    case appPublic = "app-public"
}

let scopes: Set<Scope> = [.appPrivate, .appLimited, .appPublic]

Тогда мне понадобится получить массив / набор ["app-private", "app-limited", "app-public"] на более позднем этапе (например, отправить на серверконечная точка).

Ответы [ 2 ]

2 голосов
/ 17 октября 2019

Вы должны использовать CaseIterable протокол. Возьмите этот пример:

enum Scope: String, CaseIterable {
  case appPrivate = "app-private"
  case appLimited = "app-limited"
  case appPublic = "app-public"
}

let array = Scope.allCases.map { $0.rawValue }
1 голос
/ 17 октября 2019
enum Scope: String, CaseIterable {

  case appPrivate = "app-private"
  case appLimited = "app-limited"
  case appPublic = "app-public"
}

let array = Scope.allCases.map { $0.rawValue }
print(array) //["app-private", "app-limited", "app-public"]

Если вы не хотите включать все значения перечисления и вам нужно создать массив из нескольких значений перечисления, вы можете сделать что-то вроде этого

let scopeArray: [Scope] = [.appLimited, .appPrivate]
print(scopeArray.map({$0.rawValue})) //["app-limited", "app-private"]
...