如何将泛型指定为变量?

时间:2019-03-05 11:07:36

标签: ios swift

我在模型类中有一个使用以下泛型的函数:

func loadNextPage<T: ListDiffable & JSONDecodable>(as: T.Type)

我从视图控制器中调用此函数,如下所示:

model.loadNextPage(as: EventJSONModel.self)

但是,由于可以使用我的视图控制器加载不同类型的数据,因此我需要在加载视图控制器时指定T.Type。虽然我正在通过情节提要板加载视图控制器,但无法将其实例化为通用视图。

理想情况下,我想创建一个像这样的变量:

private var objectType: (ListDiffable & JSONDecodable).Type = EventJSONModel.self

然后像这样引用它:

model.loadNextPage(as: objectType)

但这不起作用...我该怎么办?

1 个答案:

答案 0 :(得分:1)

您正在将Protocol.Type传递给通用的T.Type,这不能直接完成。虽然有一些黑客。 看看这个线程。
Why can't I pass a Protocol.Type to a generic T.Type parameter?