2014-10-02 52 views
2

我有一個generic類可以初始化爲任何類型。我想添加一個帶有單個參數的函數,該參數的值既是類的泛型類型,又符合Comparable協議。類型一致性應該執行預編譯。使通用類的函數只接受相同通用類型但更受約束的參數

我願做這樣的事情:

class Object<T> { 

    let value: T! 

    init (value: T) { 
     self.value = value 
    } 

    func doSomething<U where U: Comparable, U == T>(otherValue: U) { 
     // do something 
    } 
} 

這是可能的嗎?

回答

4

不幸的是,沒有。你不能在一個方法中進一步專門化一個泛型類型 - 你需要爲你想要的行爲添加一個頂級函數。

就是這個原因Array沒有純myArray.sort()功能,因爲沒有辦法保證任何Array實例的成員將Comparable。取而代之的是,有一個與此簽名頂級功能:

func sort<T : Comparable>(inout array: [T]) 

頂層功能將具有相似的結構:

func doSomething<T: Comparable)(obj: Object<T>, otherValue: T) { 
    // ... 
} 
3

以供參考,這是可能的,因爲雨燕2.0

extension Object where T : Comparable { 
    func doSomething(otherValue: T) { 
     // do something 
    } 
} 
相關問題