我想在特定的类中创建一个通用方法,在其中我可以调用另一个基于目标(符合特定协议)的类,该类可以进行某些计算。
如果我明确定义目标的种类,则可以正常工作,但是如果我要将其作为符合特定协议的类型来传递,则会遇到麻烦。
我有一个协议和一个符合它的类,如下所示:
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
}
}
编译错误:“目标”不是类型
当我明确地说参数是符合MyProtocol的Type时,怎么可能出错?我在这里做错了什么?
我正在使用Swift 2.3和Xcode 7.3.1
在您的代码中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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句