2016-07-11 37 views
0

在我目前的執行情況,我傳遞一個字符串枚舉使用rawValue這樣的功能:什麼類型是一個字符串枚舉因此它可以作爲一個參數?

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

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

something(Compass.East.rawValue) 

難道還有比String的功能之外的不同類型的,所以我可以做這樣的事情?

something(Compass.East) 

我不想讓Compass類型的key參數,因爲我有enums從不同的地方來,但所有來自String繼承。

我試着這樣做,卻得到了一個錯誤:

FUNC東西(重點:StringLiteralConvertible){...} // 錯誤:協議 'StringLiteralConvertible' 只能作爲一種通用的約束

有沒有我可以使用的類型,所以我不必每次都使用rawValue

回答

7

你可以這樣做:

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

something(Compass.East) 

這可讓您在具有String S作爲其值的任何枚舉通過

相關問題