2016-01-05 137 views
0

我有兩個協議AB,其中B繼承自A無法使用類型(,)的參數列表調用[方法]

protocol A { } 

protocol B: A { } 

而且我有一個具有函數調用add其參數應符合協議A一個工具類:

class Utility { 
    func add<T:A>(t:T.Type,param:T){ 
     .... 
    } 
} 

然後我有創造的Utility對象,並調用其功能的測試類add它接受類型B(實現B的類對象)的參數:

class Test { 
    var util: Utility 

    init() { 
     util = Utility() 
    } 

    func addItem(data:B){ 
     util.add(B.self,param: data) // This line produces Cannot invoke add with argument list 
    }       // of type (B.Protocol,param:B) 
} 

我在做什麼錯?

+0

請簡單地複製並粘貼您的代碼以避免發佈錯誤。 – Arc676

+0

我認爲你的案例可以簡化爲:http://swiftstub.com/171514009。看來Swift無法在帶有約束的泛型函數中處理參數的協議類型。不知道(但)如果這是一個錯誤或設計。 – courteouselk

回答

0

你的錯誤就在於,你想接受變量作爲一個協議,不是那種符合協議:

func addItem(data:B){ 
    util.add(B.self,param: data) 
} 

這是奇怪的,因爲你就在Utility類做到了。簡單的修復就是在這裏完全一樣(使用約束條件):

func addItem<T: B>(data: T) { 
    util.add(T.self, param: data) 
} 
相關問題