HandyJSON icon indicating copy to clipboard operation
HandyJSON copied to clipboard

泛型解析失败 swift 5.0版本

Open yNBy888 opened this issue 6 years ago • 10 comments

// 假设这是服务端返回的统一定义的response格式
        class BaseResponse<T: HandyJSON>: HandyJSON {
            var code: Int? // 服务端返回码
            var data: T? // 具体的data的格式和业务相关,故用泛型定义
            public required init() {}
        }
        // 假设这是某一个业务具体的数据格式定义
        struct SampleData: HandyJSON {
            var id: Int?
        }
        let sample = SampleData(id: 2)
        let resp = BaseResponse<SampleData>()
        resp.code = 200
        resp.data = sample
        let jsonString = resp.toJSONString()! // 从对象实例转换到JSON字符串
        print(jsonString) // ### **控制台打印print: {"code":200,"data":{"id":2}}**
        
        if let mappedObject = JSONDeserializer<BaseResponse<SampleData>>.deserializeFrom(json: jsonString) { // 从字符串转换为对象实例
            print(mappedObject.toJSONString()) // 打印 Optional("{\"code\":200}")
        }

=============== data 字段无法转换成model 有遇到过这样问题的吗 ? JSONDeserializer<BaseResponse<SampleData>>.deserializeFrom(json: jsonString) 这种方式无法成功转换 JSONDeserializer<#SomeModel#>.deserializeFrom(json: jsonString) 如果SomeModel为具体返回json对应的model 是可以解析的 是HandyJson不支持带泛型的class进行转换了么???

yNBy888 avatar Mar 29 '19 02:03 yNBy888

的确是暂时不支持,Swift5.0还没有完全适配,要等

likeSo avatar Mar 29 '19 06:03 likeSo

最新的 dev_for_swift5.0 分支我支持了泛型,大家可以更新下看看有没有解决问题,有问题欢迎反馈。

lynnleelhl avatar Mar 29 '19 08:03 lynnleelhl

最新的 dev_for_swift5.0 分支我支持了泛型,大家可以更新下看看有没有解决问题,有问题欢迎反馈。

pod 'HandyJSON', git:"https://github.com/alibaba/HandyJSON.git",branch:"dev_for_swift5.0"

就是这个分支, 无法解析 BaseResponse中定义的code 可以解析出来 data对应的泛型没法

yNBy888 avatar Mar 29 '19 09:03 yNBy888

这个分支我刚刚更新过了,看看最新的还有没有问题

lynnleelhl avatar Mar 29 '19 09:03 lynnleelhl

这个分支我刚刚更新过了,看看最新的还有没有问题

Nice 可以了 很棒

HenryGaoGH avatar Mar 29 '19 09:03 HenryGaoGH

最新的 dev_for_swift5.0 分支我支持了泛型,大家可以更新下看看有没有解决问题,有问题欢迎反馈。

最新的 dev_for_swift5.0 分支我支持了泛型,大家可以更新下看看有没有解决问题,有问题欢迎反馈。

pod 'HandyJSON', git:"https://github.com/alibaba/HandyJSON.git",branch:"dev_for_swift5.0"

就是这个分支, 无法解析 BaseResponse中定义的code 可以解析出来 data对应的泛型没法

可以解析了 清一下工程吧

HenryGaoGH avatar Mar 29 '19 09:03 HenryGaoGH

最新的 dev_for_swift5.0 分支我支持了泛型,大家可以更新下看看有没有解决问题,有问题欢迎反馈。

上午已经用 Codable 转Model了, 不过 刚刚 试了一下 dev_for_swift5.0 分支上面的可以了

HenryGaoGH avatar Mar 29 '19 09:03 HenryGaoGH

已更新 pod 仓库 pod 'HandyJSON', '5.0.0-beta.1'

lynnleelhl avatar Mar 29 '19 11:03 lynnleelhl

@lynnleelhl 你好,我这边也遇到了泛型反序列化的问题 下面是主要的代码:

//主要方法
func sendRequest<T: HandyJSON>(a: T.Type) {        
   let jsonString = " {\"code\":1,\"entity\":{\"access_token\":\"eyJhbGciOiJIUzI\",\"expires_in\":14400000.0}}";
   let tt1 = a.deserialize(from: jsonString, designatedPath: "entity")
   let tt2 = Login_Entity.deserialize(from: jsonString, designatedPath: "entity")
        
   var login = T()
   let tt3 = JSONDeserializer.update(object: &login, from: jsonString, designatedPath: "entity")
   let tt4 = T.deserialize(from: jsonString, designatedPath: "entity")
        
   let tt5 = JSONDeserializer<T>.deserializeFrom(json: jsonString, designatedPath: "entity")
        
   print("")
}
//调用方法
sendRequest(a: Login_Entity.self)

我的工程在swift 4.2(xcode 10.1)下跑的没有问题: image 但是当我用 xcode-select -s /Applications/Xcode.app/ 切换到 swift 5.0.1(xcode 10.2.1)的时候,修改pod到5.0.0-beta.1之后,除了model class本身去反序列化成功之外,别的方式都无法work image 希望能解决一下,这边是我的Demo project:https://github.com/KiritoStudio/HandyJSONTest

KiritoStudio avatar Jun 22 '19 04:06 KiritoStudio

接口返回的data字段,可能是字典,也可能是数据, {"code":200,"data":{"id":2}} {"code":200,"data":[{"id":2},{"id":2}]} 这样的数据结构,能一次性搞定吗

ameue avatar Jul 08 '20 09:07 ameue