较短的通用签名

时间:2018-02-21 22:26:21

标签: swift generics

我有一个使用泛型类的类,它本身具有泛型类型:

internal class WorldObjectsDataSource<WorldObjectType, ObjectsProvider: WorldObjectsProvider<WorldObjectType>> {

我需要在此课程中同时使用WorldObjectTypeObjectsProvider,但正如您所看到的那样,WorldObjectType很难输入通用ObjectsProvider,并且始终相同。当我创建这个类的实例时,我需要定义WorldObjectType两次,例如:

let ds1 = WorldObjectsDataSource<WorldObjectSUBCLASS, WorldObjectsProvider<WorldObjectSUBCLASS>>()

是否有某种方法,将此缩短为仅包含WorldObjectsProvider<WorldObjectSUBCLASS>,并从此定义获取WorldObjectSUBCLASS在我的课程中?这样我就可以使用:

let ds1 = WorldObjectsDataSource<WorldObjectsProvider<WorldObjectSUBCLASS>>()

并且在WorldObjectsDataSource中知道类型WorldObjectSUBCLASS

2 个答案:

答案 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>