繁体   English   中英

“符合协议的类的类型”作为方法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'不是类型

在此输入图像描述

当我明确地说参数是符合MyProtocolType时,该错误怎么可能? 我在这里做错了什么?

我使用的是Swift 2.3Xcode 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM