将Json字符串解码为类对象Swift [英] decode Json string to class object Swift

查看:89
本文介绍了将Json字符串解码为类对象Swift的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 private func createWeatherObjectWith(json: Data, x:Any.Type ,completion: @escaping (_ data: Any?, _ error: Error?) -> Void) {
        do {
            let decoder = JSONDecoder()
            decoder.keyDecodingStrategy = .convertFromSnakeCase
            let weather = try decoder.decode(x.self, from: json)
            return completion(weather, nil)
        } catch let error {
            print("Error creating current weather from JSON because: \(error.localizedDescription)")
            return completion(nil, error)
        }
    }

在这里,我在上面编写了将Json字符串解码为类的代码对象通过传递类类型。但是会出现以下错误

Here I write above code to decode Json string to class object by passing class type .But it gives the following error

Cannot invoke 'decode' with an argument list of type '(Any.Type, from: Data)'


推荐答案

如果尝试解码任何类型的对象,然后使用这些技术

If you are trying to decode any type of object then use these technique

1。泛型函数

private func createWeatherObjectWith<T: Decodable>(json: Data, Object:T.Type ,completion: @escaping (_ data: T?, _ error: Error?) -> Void) {
    do {
        let decoder = JSONDecoder()
        decoder.keyDecodingStrategy = .convertFromSnakeCase
        let weather = try decoder.decode(T.self, from: json)
        return completion(weather, nil)
    } catch let error {
        return completion(nil, error)
    }
}

2。扩展可解码

extension Decodable {
    static func map(JSONString:String) -> Self? {
        do {
            let decoder = JSONDecoder()
            decoder.keyDecodingStrategy = .convertFromSnakeCase
            return try decoder.decode(Self.self, from: Data(JSONString.utf8))
        } catch let error {
            print(error)
            return nil
        }
    }
}

使用:

let user = User.map(JSONString:"your JSON string")
let users = [User].map(JSONString:"your JSON string")

这篇关于将Json字符串解码为类对象Swift的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆