以下Swift代码无法编译:
class Entity {
}
class EntityConverter<T: Entity> {
}
class GetEntityServerAction<T: Entity, C: EntityConverter<T>> {
}
class GetEntityListServerAction<T: Entity, C: EntityConverter<T>>: GetEntityServerAction<T, C> {
}
与错误:
Type 'C' does not inherit from 'EntityConverter<T>'
用于GetEntityListServerAction
类定义。由于某些原因,编译器看不到定义了C参数,就像继承了所需的完全相同的类型一样。
对于那些习惯于Java或C#中复杂的通用层次结构的人来说,代码看起来应该很简单,但是Swift编译器确实不喜欢它。
您可能会发现使用协议和关联类型是更类似于Swift的处理方式:
class Entity { }
protocol EntityConversionType {
// guessing when you say conversion, you mean from something?
typealias FromEntity: Entity
}
class EntityConverter<FromType: Entity>: EntityConversionType {
typealias FromEntity = FromType
}
class GetEntityServerAction<T: Entity, C: EntityConversionType where C.FromEntity == T> { }
class GetEntityListServerAction<T: Entity, C: EntityConversionType where C.FromEntity == T>: GetEntityServerAction<T, C> { }
let x = GetEntityListServerAction<Entity, EntityConverter<Entity>>()
也许GetEntityServerAction
还可以通过只是一个协议表示,你可以转换Entity
,EntityConverter
并GetEntityListServerAction
以结构也。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句