2015-11-02 33 views
0

我想創建一個接受泛型類型作爲關聯值的枚舉。
編譯器會抱怨:
如何創建一個接受通用類型作爲關聯類型的枚舉

引用泛型類型 'GenericItem' 要求論點< ...>

的方案很簡單:

struct GenericItem <Item:FormattableAsStringWithPrecision> { 
    let value: Item 
} 

enum Enumeration { 
    case Generic(values: [GenericItem]) 
} 

我無法理解如何使這成爲可能。

回答

1

您還需要將泛型類型添加到枚舉中,類型可以從初始化程序中推斷出來,因此您無需將其作爲泛型類型參數傳遞。

下面是一個如何做到這一點的例子。

struct GenericItem<T: CustomDebugStringConvertible> { 
    let value: T 
} 

enum Enumeration<T: CustomDebugStringConvertible> { 
    case Generic(value: [GenericItem<T>]) 
} 

let someValue = Enumeration.Generic(value: [ GenericItem(value: "") ]) 

編輯:我改變了FormattableAsStringWithPrecisionCustomDebugStringConvertible,因爲我認爲那是可以很容易地換出自己的自定義協議之一,但同樣的邏輯仍然適用於任何協議。

+0

是的它確實有道理......謝謝 – Andrea

+0

@Andrea無後顧之憂 - 泛型很難,保持它 –