在方法体<t>中使用泛型参数

时间:2018-02-21 08:33:57

标签: json swift generics

我正在尝试创建如下通用方法:

private func map<T>(type:T, jsonString:String) -> T
{
    do
    {
        let model = try Mapper<type>().map(JSONString: jsonString)!
        return model
    }
    catch
    {
        Log.error("Failed to convert JSON jsonString to model object: \(jsonString)")
    }
    return EmptyModel()
}

但它导致编译错误: 错误:使用未声明的类型'type'

如何更改它以使用指定类型(类对象)和Mapper的通用值?

1 个答案:

答案 0 :(得分:1)

您可以使用T代替type

let model = try Mapper<T>().map(JSONString: jsonString)!

您可能想要更改方法签名,因此它返回T的实例而不是类型T本身:

private func map<T>(type: T.Type, jsonString: String) -> T

话虽如此,Swift已经拥有JSONDecoder。它可能已经支持您要实施的内容。

let decoder = JSONDecoder()
let model = try decoder.decode(Model.self, from: data)