【发布时间】:2018-02-21 20:04:20
【问题描述】:
我有一个采用泛型类型的类,它必须继承自类WorldObject:
class WorldObjectsProvider<WorldObjectType: WorldObject>
这个类将创建类WorldObjectType 的对象并在一个函数中返回它们。现在我想创建一个此类类的数组(WorldObjectsProvider),但我希望这个数组能够保留许多不同类型的泛型类WorldObjectsProvider,例如:
class TestObject: WorldObject { }
let providers: [WorldObjectsProvider<WorldObject>] = [WorldObjectsProvider<WorldObject>(), WorldObjectsProvider<TestObject>()]
总的来说,我认为这是可能的,因为所有泛型类型都应该继承自 WorldObject。这可以通过返回所有值作为对基类WorldObject 的引用来实现。但我想这对于泛型来说可能太多了。有没有办法创建这样的数组?
【问题讨论】:
-
泛型在参数方面是不变的,因此你需要的东西更难实现。
-
所有泛型类都是不同的类型,具体取决于泛型类型参数,并且 Swift 泛型类不是协变的,因此即使
B是A的子类,Generic<A>和Generic<B>也不相关. -
您可能需要重新考虑这种方法。也许创建协议类型数组...一般来说,我看不到使用完全不同类型的数组...