我想在特定的类中创建一个泛型方法,我可以 拨打另一个基于目标的课程(其中 符合特定协议),可以做某些计算。
如果我明确定义它是什么类型的目标,它可以正常工作,但是 如果我想将它作为符合特定协议的类型传递,我 遇到麻烦。
我有一个协议和一个符合它的类,如下所示:
protocol MyProtocol {
func someFunc()
}
class ConformingClass: MyProtocol {
func someFunc() {
// Do something
}
}
我需要使用一个课程:
class SomeClass<N: MyProtocol> {
class func doSomething() {
// Do something
}
}
我的课程中我想使用 SomeClass ,但是它的类型将被定义为以下方法的参数:
class MyClass {
func doStuff<C: MyProtocol>(target: C.Type) {
SomeClass<target>.doSomething
}
}
编译错误:&#39;目标&#39;不是一种类型
当我明确说明参数是类型符合 MyProtocol 时,该错误怎么可能?我在这里做错了什么?
我正在使用 Swift 2.3 和 Xcode 7.3.1
答案 0 :(得分:3)
在您的代码target
中包含“运行时类型对象”。并且你不能使用泛型类型的参数。
你知道你不能这样做:
func doStuff<C: MyProtocol>(target: C.Type) {
var c: target? //<- This is illegal. You cannot use `target` where a "type" is needed.
}
为什么不把它写成:
func doStuff<C: MyProtocol>(target: C.Type) {
SomeClass<C>.doSomething()
}
您可以将其用作:
myObj.doStuff(ConformingClass.self)