intsig171 / SmartCodable

SmartCodable is a data parsing library based on Codable. It is simple to use, with robust compatibility being one of its main features. SmartCodable 是基于Codable实现的数据解析库。简单易用,强悍的兼容性是SmartCodable的主要特点。 表层API和功能几乎和HandyJSON一致,支持快速的迁移。
https://smart-codable.vercel.app
MIT License
417 stars 43 forks source link

像HandyJSON一样支持已有模型的update? #21

Closed trimaximus closed 4 months ago

trimaximus commented 6 months ago

HandyJSON中,可以使用JSONDeserializer.update(object: &object, from: jsonString)来更新已有的模型,SmartCodable现行版本(3.4.0)并无相关特性。

intsig171 commented 6 months ago

这个需求,我需要再思考一下实现的可能。 目前来看不太好实现。

trimaximus commented 5 months ago

我在使用Codable的过程中,用了个笨办法,传入object1,decode到另外一个对象object2,然后使用keyPath,copy非空字段到object1,效率还行。 参考链接:https://stackoverflow.com/questions/78487130/best-way-to-copy-set-of-parameters-from-one-object-to-another

intsig171 commented 5 months ago

好的,我们评估一下。

intsig171 commented 5 months ago

可否提供你的实现思路。 最好可以提供可运行的代码。 stackoverflow上的copy方法似乎会导致示内存访问问题。虽然单个path的处理可以解决问题,但是不太好处理不同类型的WritableKeyPath,你是如何这种情况下的类型擦除的?

trimaximus commented 5 months ago

不同类型的WritableKeyPath确实是个难点,鉴于我们项目对字段解析的顺序有要求,目前用硬编码的方式对已有对象进行更新,并没有优雅的解决方案,Sorry~

P.S. 我将在后续尝试实现不同类型的WritableKeyPath泛型处理,可否不要关闭此issue,方便后续联系?

intsig171 commented 5 months ago

加QQ群吧: 865036731。 联系更顺畅。我实现了一个比较low的方案,至少可以实现这个需求,可以一起探讨一下。

intsig171 commented 4 months ago

4.0.0-beta.5 版本已支持。 查看SmartUpdater。