"符合协议的类的类型"作为方法swift中的参数

时间:2016-07-08 13:41:27

标签: ios 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
    }
}

问题

  

编译错误:&#39;目标&#39;不是一种类型

enter image description here

问题

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

我正在使用 Swift 2.3 Xcode 7.3.1

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)