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 */ }