我有两个协议A
和B
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 :(得分:0)
您的错误在于您尝试接受变量作为协议,而不是符合协议的类型:
func addItem(data:B){
util.add(B.self,param: data)
}
这很奇怪,因为你在Utility
课程中做得很好。简单的解决方法是在这里完全相同(使用约束):
func addItem<T: B>(data: T) {
util.add(T.self, param: data)
}