在swift中约束到另一个泛型的泛型的扩展

在swift中约束到另一个泛型的泛型的扩展,swift,generics,Swift,Generics,考虑以下情况,T1和T2可以是任何类型 class Foo<T1> {} class Bar<T2> {} class Foo{} 类条{} 扩展Foo,其中T1:Bar{//而不是任何 func test(){Swift.print(self)} } 设foo=foo() foo.test() //输出:CfsdikgLiC.Foo 可以吗?或其他版本: class Foo<T1> {} class Bar<T2> {} extension

考虑以下情况,
T1
T2
可以是任何类型

class Foo<T1> {}
class Bar<T2> {}
class Foo{}
类条{}
扩展Foo,其中T1:Bar{//而不是任何
func test(){Swift.print(self)}
}
设foo=foo()
foo.test()
//输出:CfsdikgLiC.Foo
可以吗?或其他版本:

class Foo<T1> {}
class Bar<T2> {}

extension Foo where T1:Bar<Any> { 
    func test() { Swift.print(self) }
}

let foo = Foo<Bar<Any>>() // instead of NSObject
foo.test()
// output: T8fT4XJI7R.Foo<T8fT4XJI7R.Bar<Any>>
class Foo{}
类条{}
扩展Foo,其中T1:Bar{
func test(){Swift.print(self)}
}
让foo=foo()//而不是NSObject
foo.test()
//输出:T8fT4XJI7R.Foo

Qux和Bar只是一般占位符,你知道你还没有将它们定义为类吗?!是的,那不是很清楚,谢谢你指出。更新了问题。谢谢,我已经尝试了第一个案例,它不起作用,请参阅更新的问题。在您的示例中,它可以很好地编译,但是一旦在扩展中添加了一些东西并使用了,它就会失败,类型不匹配。有趣的问题。答案已更新。感谢您进一步查看,但我需要
T2
为任意值。显然,在深入挖掘之后,Swift还不可能做到这一点,因为仿制药仍在积极改进中——请密切关注它。
class Foo<T1> {}
class Bar<T2> {}

extension Foo where T1:Bar<NSObject> { // instead of Any
    func test() { Swift.print(self) }
}

let foo = Foo<Bar<NSObject>>()
foo.test()
// output: CfsdikgLiC.Foo<CfsdikgLiC.Bar<Foundation.NSObject>>
class Foo<T1> {}
class Bar<T2> {}

extension Foo where T1:Bar<Any> { 
    func test() { Swift.print(self) }
}

let foo = Foo<Bar<Any>>() // instead of NSObject
foo.test()
// output: T8fT4XJI7R.Foo<T8fT4XJI7R.Bar<Any>>