kakaopensource / KakaJSON

Fast conversion between JSON and model in Swift.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

示例中写法解析失败,不知是我写法错误,还是这种写法暂不支持解析

mg459046365 opened this issue · comments

struct HttpResposeData<T: Convertible>: Convertible {
    /// 服务器状态码
    var code: Int?
    /// 服务器消息
    var message: String?
    /// 数据
    var data: T?
    init() {
    }
}

class KJTestMode: Convertible {
    var name: String?
    var age: Int = 18
    required init() {}

    class func testSampleData() {
        let jsonString = """
        {
            "code":1000,
            "message":"测试数据",
            "data":[
                {
                    "name":"a",
                    "age":18
                },
                {
                    "name":"b",
                    "age":20
                },
                {
                    "name":"c",
                    "age":"24"
                }
            ]
        }
        """

        let model = jsonString.kj.model(HttpResposeData<[KJTestMode]>.self)
        let model1 = jsonString.kj.model(type: HttpResposeData<[KJTestMode]>.self)
        print("testSampleData解析结果\(model),,,,\(model1)")
        //testSampleData解析结果Optional(LQTool.HttpResposeData<Swift.Array<LQTool.KJTestMode>>(code: Optional(1000), message: Optional("测试数据"), data: nil)),,,,Optional(LQTool.HttpResposeData<Swift.Array<LQTool.KJTestMode>>(code: Optional(1000), message: Optional("测试数据"), data: nil))

    }

    class func testSampleData1() {
        let jsonString = """
        {
            "code":0,
            "message":"",
            "data":{
                "key1":{
                    "name":"a",
                    "age":18
                },
                "key2":{
                    "name":"b",
                    "age":20
                },
                "key3":{
                    "name":"c",
                    "age":"24"
                }
            }
        }
        """
        let model = jsonString.kj.model(HttpResposeData<[String: KJTestMode]>.self)
        let model1 = jsonString.kj.model(type: HttpResposeData<[String: KJTestMode]>.self)
        print("testSampleData1解析结果\(model),,,,\(model1)")
        //testSampleData1解析结果Optional(LQTool.HttpResposeData<Swift.Dictionary<Swift.String, LQTool.KJTestMode>>(code: Optional(0), message: Optional(""), data: Optional([:]))),,,,Optional(LQTool.HttpResposeData<Swift.Dictionary<Swift.String, LQTool.KJTestMode>>(code: Optional(0), message: Optional(""), data: Optional([:])))
    }
}

extension Array: Convertible where Element: Convertible {
    // 添加支持
}

extension Dictionary: Convertible where Value: Convertible {
    // 添加支持
}

data数据无法解析出来,希望明杰老师指点一下 @CoderMJLee

T去掉Convertible就好了,只需要让模型遵守Convertible,数组、字典不需要

struct HttpResposeData<T>: Convertible {
    /// 服务器状态码
    var code: Int?
    /// 服务器消息
    var message: String?
    /// 数据
    var data: T?
    init() {
    }
}

/*
extension Array: Convertible where Element: Convertible {
    // 添加支持
}

extension Dictionary: Convertible where Value: Convertible {
    // 添加支持
}
*/

谢谢啦@CoderMJLee ,测试OK了。