如何获取rawType为Int的枚举的字符串大小写

Nan*_*gin 9 enums swift

我想要列举一些国家,例如:

enum Country: Int {
    case Afghanistan
    case Albania
    case Algeria
    case Andorra
    //...
}
Run Code Online (Sandbox Code Playgroud)

我选择IntrawValue类型有两个主要原因:

  1. 我想确定这个枚举的总数,使用IntrawValue类型简化了这个:

    enum Country: Int {
        case Afghanistan
        // other cases
        static let count: Int = {
            var max: Int = 0
            while let _ = Country(rawValue: max) { max = max + 1 }
            return max
        }()
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我还需要一个代表一个国家的复杂数据结构,并且有一个数组结构的数组.我可以使用Int-valued枚举轻松地从这个数组下标访问某个国家/地区.

    struct CountryData {
         var population: Int
         var GDP: Float
    }
    
    var countries: [CountryData]
    
    print(countries[Country.Afghanistan.rawValue].population)
    
    Run Code Online (Sandbox Code Playgroud)

现在,我不知何故需要将某个Country案例转换为String(也就是说

let a = Country.Afghanistan.description // is "Afghanistan"
Run Code Online (Sandbox Code Playgroud)

由于有很多情况,手动编写类似转换表的函数似乎是不可接受的.

那么,我怎么能一次获得这些功能呢?:

  1. 使用枚举可以在编译期间找到潜在的拼写错误导致的错误.(Country.Afganistan不会编译,'g'之后应该有'h',但某些方法如国家["Afganistan"]将编译并可能导致运行时错误)
  2. 能够以编程方式确定总国家/地区数量(可能在编译时确定,但我不想使用字面值,并且每次添加或删除国家时请记住要正确更改它)
  3. 能够轻松下标访问元数据数组.
  4. 能够得到一个字符串case.

使用enum Country: Int满足1,2,3但不满足4

使用enum Country: String满足1,3,4但不满足2(使用Dictionary而不是Array)

PGD*_*Dev 9

要打印enum's案例String,请使用:

String(describing: Country.Afghanistan)
Run Code Online (Sandbox Code Playgroud)

您可以创建类似于以下内容的数据结构:

enum Country
{
    case Afghanistan
    case Albania
    case Algeria
    case Andorra
}

struct CountryData
{
    var name : Country
    var population: Int
    var GDP: Float
}

var countries = [CountryData]()
countries.append(CountryData(name: .Afghanistan, population: 2000, GDP: 23.1))
print(countries[0].name)
Run Code Online (Sandbox Code Playgroud)