2016-09-03 39 views
12

我在C中有一個枚舉,索引需要用一個字符串表示。通過索引訪問字符串枚舉

整數索引如何使用Swift類型的String類型?

我想將枚舉複製到Swift中,將類型設置爲字符串並定義所有的原始值以顯示文本,然後使用C枚舉值爲Swift String枚舉提取原始值文本。

否則,我將只創建一個字符串數組..但是枚舉將更加可用。

回答

22

在Swift中,枚舉類型不保存案例的索引信息(至少不是程序員提供的)。

所以:

如何字符串類型的雨燕通過枚舉整數索引使用嗎?

答案是「你不能」。


可以綁定Int(或枚舉例)和比只需創建一個字符串數組其他許多方面String值..

例如,如果您綁定的字符串可以是相同的case標籤,你可以寫這樣的事情:

enum MyEnum: Int { 
    case foo 
    case bar 
    case baz 

    var string: String { 
     return String(self) 
    } 
} 

if let value = MyEnum(rawValue: 0) { 
    print(value.string) //->foo 
} 

如果你的字符串需要一個稍微複雜一些顯示文本,你能給我們e Swift Dictionary綁定枚舉個案和字符串。

enum AnotherEnum: Int { 
    case foo 
    case bar 
    case baz 

    static let mapper: [AnotherEnum: String] = [ 
     .foo: "FooString", 
     .bar: "BarString", 
     .baz: "BazString" 
    ] 
    var string: String { 
     return AnotherEnum.mapper[self]! 
    } 
} 

if let value = AnotherEnum(rawValue: 1) { 
    print(value.string) //->BarString 
} 

比簡單陣列串的更可讀的一點點。

+0

非常好,謝謝:) – jarryd

4

簡單的解決方法,如果您想枚舉字符串枚舉也很有用。

enum MyEnum: String { 
    case foo = "fooString" 
    case bar = "barString" 
    case baz = "bazString" 

    static let allValues = [foo, bar, baz] //must maintain second copy of values 
} 

//enumeration advantage 
for value in MyEnum.allValues { 
    print(value) 
} 

//get value by index 
let value = MyEnum.allValues[1] 

print(value) //barString 
+0

非常輝煌,謝謝。我懷疑這會使它成爲語言本身。除非有預先存在的方法來訪問它們.. –