我有一个使用泛型类的类,它本身具有泛型类型:
internal class WorldObjectsDataSource<WorldObjectType, ObjectsProvider: WorldObjectsProvider<WorldObjectType>> {
我需要在此课程中同时使用WorldObjectType
和ObjectsProvider
,但正如您所看到的那样,WorldObjectType
很难输入通用ObjectsProvider
,并且始终相同。当我创建这个类的实例时,我需要定义WorldObjectType
两次,例如:
let ds1 = WorldObjectsDataSource<WorldObjectSUBCLASS, WorldObjectsProvider<WorldObjectSUBCLASS>>()
是否有某种方法,将此缩短为仅包含WorldObjectsProvider<WorldObjectSUBCLASS>
,并从此定义获取WorldObjectSUBCLASS
在我的课程中?这样我就可以使用:
let ds1 = WorldObjectsDataSource<WorldObjectsProvider<WorldObjectSUBCLASS>>()
并且在WorldObjectsDataSource中知道类型WorldObjectSUBCLASS
?
答案 0 :(得分:0)
您在最后一行代码中寻找的内容是不可能的,如果您的班级有两个,您就不能省略其中一个通用参数。但是,如果WorldObjectSUBCLASS
始终相同,则可以为特定泛型类型创建类型。
typealias WorldObjectAlias = WorldObjectsDataSource<WorldObjectSUBCLASS, WorldObjectsProvider<WorldObjectSUBCLASS>>
let ds1 = WorldObjectAlias()
答案 1 :(得分:0)
您可以使用通用类型别名:
typealias WorldDataSource<T> = WorldObjectsDataSource<T, WorldObjectsProvider<T>>
let ds1 = WorldDataSource<WorldObjectSUBCLASS>