源码

高可用型Codable

先放Github地址

优点

  • Bool Int Double String等常用类型相互转换

  • jsonObject转String

  • 可带默认值

  • Swift版NSNumber,支持optional修饰的数字转到OC使用

互转原理

通过重载KeyedDecodingContainer的解析方法decodeIfPresent,在其中做了各种类型的兼容,所以只有在对象定义为optional的时候才会有以上兼容操作。
同时要注意的是重载只在internal范围生效,所以如果对象的定义在另外一个module是不会有效果的.

YZJAnyDecodable支持

YZJAnyDecodable对象主要是为了解决一个key值解析对应会有多种结果的情况,例如key为data的值有时候返回数组,有时候返回字典,这个时候用YZJAnyDecodable来声明就能使用decode方法解析出来,而原生的Any并不支持Codable。

这里YZJAnyDecodable主要用来适配定义为String?的成员变量的解析,把它全转为String类型,用到的时候再进行解析

默认值

如果需要使用Codable解析后对没有的变量设置默认值, 声明一个 CodingKeys 枚举属性
并实现DefaultCodingKey 协议的 func defaultValue() -> Any?方法,在方法内设置需要返回的默认值

 class TestObjectCodable {
    var dString: String?

    enum CodingKeys: String, DefaultCodingKey {
        case dString

        func defaultValue() -> Any? {
            switch self {
            case .dString:
            return "1"
        }
    }
 }

基础类型转OC的支持

YZJNumber 主要是为了解决混编工程中Swift定义为Optional的对象转不了OC的问题,并支持了Codable

class TestObjectCodable {
    var numberBool: YZJNumber?
    var numberInt: YZJNumber?
    var numberDouble: YZJNumber?
    var numberNULL: YZJNumber?
    var numberNone: YZJNumber?
}
(2)

本文由 投稿者 创作,文章地址:https://blog.isoyu.com/archives/gaokeyongxingcodable.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:3月 18, 2019 at 02:27 下午

热评文章

发表回复

[必填]

我是人?

提交后请等待三秒以免造成未提交成功和重复