我有一些代码,我试图创建一个通用的jsonDecode函数来将json解码为可编码对象,问题是我不知道如何编写它,以便调用该函数并传入我想要解码的可编码对象的类型。
以下是我目前拥有的,但它显然不工作:
static func decodeJSON(_ filename: String, as objectType: Any) {
// Earlier part of function gets jsonData variable
do {
return try JSONDecoder().decode(objectType.self, from: jsonData)
} catch {
print(error)
}
}
我需要把objectType
参数的类型设置为什么?,然后我应该如何在objectType.self
的地方调用它?,我需要使用泛型吗?
1条答案
按热度按时间olmpazwi1#
正如@HangarRash回复的那样,在
TopLevelDecoder
的decode
方法上对函数进行建模解决了这个问题。我将函数声明行改为func decodeJSON<T: Codable>(_ filename: String, as objectType: T.Type )
,这样就可以解码成任何对象类型。假设你想解码成一个名为RandomClass
的类,你可以使用decodeJSON("filename", as: RandomClass.self)