将swift类传递给泛型函数

时间:2015-06-26 13:27:58

标签: swift introspection

我正在尝试使用泛型动态创建基于类实例的类型,但是我面临一些奇怪的行为。在示例1中,一切正常,但在示例2中,如果我将Test.self传递给泛型函数,它就不起作用。类型是一样的,一切都是一样的,我不明白为什么。

int main(void)

2 个答案:

答案 0 :(得分:2)

这是因为T不属于Test类型。解决这个问题:

class Builder{
  init(){
  }

  // T has to be of type Test or is a subclass of Test
  func use<T: Test>(test2: T.Type) -> Void{
    test2(x: 10)
  }
}

答案 1 :(得分:2)

当您定义use<T>函数时,您必须以某种方式告诉它您传递的类将具有init(x:)构造函数。

您可以通过声明协议并使可选类型T符合该协议来实现。

试试这个:

protocol TestProtocol {
    init(x:Int)
}

class Test: TestProtocol {
    required init(x: Int){
        // Do Something
    }
}

class Builder{
    init(){
    }

    func use<T: TestProtocol>(test2: T.Type) -> TestProtocol {
        return test2(x: 10)
    }
}

PD:在Swift 1.2上测试