2016-07-11 4 views
0

は、私はこのようなrawValueを使用して関数に文字列の列挙型を渡しています:文字列列挙型なので、パラメータとして使用できますか?私の現在の実装で

enum Compass: String { 
    case North, South, East, West 
} 

func something(key: String) {...} 

something(Compass.East.rawValue) 

ので、私はこのような何かを行うことができます関数のString以外の異なるタイプがありますか?

something(Compass.East) 

私はenumsは、さまざまな場所から来ているので、私は、タイプCompasskeyパラメータを作成する必要はありませんが、すべてがStringから継承します。

私はこれをやってみましたが、エラーが発生しました:(キー:StringLiteralConvertible)

FUNC何か{...} //エラー:プロトコル 'StringLiteralConvertibleは' のみ

一般的な制約として使用することができます

私はいつでもrawValueを使用する必要はありませんので、使用できるタイプはありますか?

答えて

7

あなたはこれを行うことができます。

func something<T: RawRepresentable where T.RawValue == String>(key: T) { 
    let string = key.rawValue 
} 

something(Compass.East) 

これは、あなたがその値としてString秒を持っている任意の列挙型に渡すことができます

関連する問題