我正在尝试使用泛型动态创建基于类实例的类型,但是我面临一些奇怪的行为。在示例1中,一切正常,但在示例2中,如果我将Test.self传递给泛型函数,它就不起作用。类型是一样的,一切都是一样的,我不明白为什么。
int main(void)
答案 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上测试