问题
我想在一个特定的类中创建一个泛型方法,在那里我可以调用另一个基于目标(符合特定协议)的类,可以执行某些计算。
如果我显式定义它是什么类型的目标,它可以正常工作,但是如果我想把它作为符合特定协议的类型传递,我就会遇到麻烦。
不清楚不要读
我有一个方案和一个符合该方案的类,如下所示:
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
}
}
问题
编译错误:“target”不是类型
问题
当我明确地说参数是一个符合MyProtocol的Type时,这个错误怎么可能发生呢?我在这里做错了什么?
我正在使用Swift 2.3和Xcode 7.3.1
2条答案
按热度按时间piah890a1#
在你的代码中
target
包含了一个“运行时类型对象”,并且你不能使用泛型类型参数,你知道你不能这样做:你为什么不把它写成:
您可以将其用作:
nkoocmlb2#
现代方法:
您还可以将
Collection
(Array
、Set
等)与any
一起使用,以混合匹配符合类型:假设你有类
A
和B
,它们都符合MyProtocol
,它们可以在同一个集合中传递,比如: