![](/img/trans.png)
[英]How to write a return type of a method as a class that conforms to a protocol + swift
[英]“Type of a class which conforms to a protocol” as parameter in a method swift
我想在一个特定的类中创建一个泛型方法,在那里我可以调用另一个基于目标 (符合特定协议)的类,可以进行某些计算。
如果我明确定义它是什么类型的目标,它可以正常工作,但如果我想将它作为符合特定协议的类型传递,我会遇到麻烦。
我有一个协议和一个符合它的类如下:
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
在您的代码中, 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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.