2016-10-04 73 views
1

我有一個String類型的枚舉,它需要具有多個具有相同值的變量。我的枚舉看起來是這樣的:嘗試使用在Swift中有重複值的枚舉

class MyClass { 

    enum MyEnum: String { 
    case blahA = "blaha" 
    case blahB = "blahb" 
    ... 
    static var blahD = "blah" 
    static var blahE = "blah" 
    } 
} 

爲什麼我使用的靜止無功在上述結構的原因是因爲這兩個「blahD」和「blahE」需要引用相同的字符串值,在不同的地方使用(不要問我爲什麼,它只是這樣)。但是,我有我需要在枚舉值通過如下方法:

if let testString = myString(foo: MyEnum.blahD) {...} 

可惜我正在以下編譯錯誤:

Cannot convert value of type "String" to expected argument type "MyClass.MyEnum".

如何避開傳遞上面的變量,它在方法中的枚舉中具有重複值,但將其轉換爲「MyClass.MyEnum」的類型?

回答

2

如果你把多餘的情況下,你可以做到這一點直接引用,而不是僅僅賦予它們相同的字符串值的其他枚舉情況:

class MyClass { 

    enum MyEnum: String { 
    case blahA = "blaha" 
    case blahB = "blahb" 
    ... 
    case blahD = "blah" 
    static var blahE = MyEnum.blahD 
    } 
} 

那麼你可以傳遞MyEnum.blahE以同樣的方式,你會通過MyEnum.blahD

1

如果該函數的值爲MyEnum,則不能這樣做。類型屬性blahDblahE根本就不是那種類型。只有case的枚舉類型爲MyEnum

函數參數的類型必須更改爲String

唯一的另一種解決方法是向枚舉中添加一個具有與這兩個屬性的值匹配的原始值的案例:case blahDOrE = "blah"。那麼你可以構建這種情況:MyEnum(rawValue: MyEnum.blahD),但我看不出這是非常有用的。