Swift协变generics

这是我想要实现的一个例子:

protocol SomeType {} class SomeClass: SomeType {} struct SomeGenericStruct { typealias E = A } func take(someType: SomeGenericStruct) {} let concreteGenericStruct1: SomeGenericStruct = SomeGenericStruct() let concreteGenericStruct2: SomeGenericStruct = SomeGenericStruct() take(concreteGenericStruct1) take(concreteGenericStruct2) // much no work, very repair. wow. 

甚至更简单:

 let concreteGenericStruct3: SomeGenericStruct = SomeGenericStruct() as SomeGenericStruct // still no work 

我怎样才能设法使用concreteGenericStruct2

您可以使用generics方法:

 func take(someType: SomeGenericStruct) { } 

唯一的问题是你不能将SomeGenericStruct传递给它。 它必须是某种具体类型的通用。 如果完全有必要,你可以基本上有两个函数做同样的事情:

 func take(someInput: SomeGenericStruct) { /* do stuff */ } func take(someType: SomeGenericStruct) { /* do same stuff */ }