首页 > 解决方案 > 根据条件选择泛型

问题描述

我无法弄清楚如何根据给定条件动态选择泛型类型。例如:

let someCondition: Bool = ...
var model = someCondition ? SomeStruct.self : [SomeOtherStruct].self

doSomething(modelType: model) { result in
    ...
}

func doSomething <T: Codable>(modelType: T.Type, completion: @escaping (Result<T, Error>) -> Void) {
    ...
}

上面第 2 行中的三元运算导致以下错误:Result values in '? :' expression have mismatching types 'SomeStruct.Type' and '[SomeOtherStruct].Type'

知道解决方案或解决方法是什么吗?提前致谢。

[编辑]

更详细地说,这个想法是doSomething()执行请求并接收 JSON 有效负载,该有效负载取决于 URL,返回给定结构(例如SomeStruct[SomeOtherStruct]

https://sandbox.somecompany.com/foo/chart/1d返回一个可以映射到的有效载荷SomeStruct

https://sandbox.somecompany.com/foo/chart/5d返回一个可以映射到的有效载荷[SomeOtherStruct]

网络请求是完全一样的,所有改变的只是 URL 中指定的参数(即1dor 5d)。我可以将这个函数分成两个——每种情况一个——,但我想知道这是否可以使用泛型统一到一个函数中。

标签: swiftgenerics

解决方案


推荐阅读