无法使用类型(,)的参数列表调用[Method]

时间:2016-01-05 11:18:59

标签: ios swift swift2

我有两个协议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)
}

我做错了什么?

1 个答案:

答案 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)
}