2016-10-04 27 views
1

同じ値を持つ複数の変数を持つ必要があるString型の列挙型があります。 (「blahD」と「blahE」の両方が別の場所で使用したのと同じ文字列の値を、参照する必要があるため、私は上記の構成に静的VARのを使用していた理由があるSwiftで重複する値を持つ列挙型で作業しようとしています

class MyClass { 

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

:私の列挙型は次のようになりますなぜ、それだけでこのようにしなければならないのか尋ねないでください)。しかし、私は次のように列挙型の値を渡す必要があり方法があります。

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

を私は残念ながら、次のコンパイルエラーを取得しています:

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

はどうやって渡すの周り入手できますかメソッドの列挙型に重複した値を持つ変数の上に "MyClass.MyEnum"の型にキャストしますか?

答えて

2

がちょうどそれらに同じ文字列値を割り当てるのではなく直接他の列挙型のケースを参照する:あなたはMyEnum.blahD

を通過する

class MyClass { 

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

は、その後、あなたはMyEnum.blahE同じように渡すことができます

1

関数がMyEnum型の値をとる場合、これを行うことはできません。タイププロパティblahDblahEは、単にそのタイプではありません。列挙型のcaseのみがタイプMyEnumです。

functionパラメータの型をStringに変更する必要があります。

これ以外の唯一の方法は、その2つのプロパティの値と一致する生の値を持つ列挙型にケースを追加することです:case blahDOrE = "blah"。その場合、あなたはそのケースを構築することができます:MyEnum(rawValue: MyEnum.blahD)、しかし、私は非常に有用であることがわかりません。あなたは余分なケースを作る場合は、これを行うことができ

関連する問題