泛型解析失败 swift 5.0版本
// 假设这是服务端返回的统一定义的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进行转换了么???
的确是暂时不支持,Swift5.0还没有完全适配,要等
最新的 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对应的泛型没法
这个分支我刚刚更新过了,看看最新的还有没有问题
这个分支我刚刚更新过了,看看最新的还有没有问题
Nice 可以了 很棒
最新的 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对应的泛型没法
可以解析了 清一下工程吧
最新的 dev_for_swift5.0 分支我支持了泛型,大家可以更新下看看有没有解决问题,有问题欢迎反馈。
上午已经用 Codable 转Model了, 不过 刚刚 试了一下 dev_for_swift5.0 分支上面的可以了
已更新 pod 仓库 pod 'HandyJSON', '5.0.0-beta.1'
@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)下跑的没有问题:
但是当我用 xcode-select -s /Applications/Xcode.app/ 切换到 swift 5.0.1(xcode 10.2.1)的时候,修改pod到5.0.0-beta.1之后,除了model class本身去反序列化成功之外,别的方式都无法work
希望能解决一下,这边是我的Demo project:https://github.com/KiritoStudio/HandyJSONTest
接口返回的data字段,可能是字典,也可能是数据,
{"code":200,"data":{"id":2}}
{"code":200,"data":[{"id":2},{"id":2}]}
这样的数据结构,能一次性搞定吗