美文网首页
TransformType

TransformType

作者: LuckySunSet | 来源:发表于2019-05-22 09:42 被阅读0次

    TransformType是AlamofireObjectMapper定义的用于类型转换的协议。在做Json与对象的map映射时,可以进行不同格式的value转换与属性的互转。
    TransformType提供了两个关联类型:

    /// 对象中的属性类型
    associatedtype Object
    /// json中的值类型
    associatedtype JSON
    

    TransformType还提供了两个接口的声明,用户定义类型互转的具体实现:

    /// 从Json到对象属性的转换
    /// value: 从Json中取到的值
    /// return: 转换过后的值
    func transformFromJSON(_ value: Any?) -> Object?
    /// 从对象到Json的转换
    /// value: 属性的值
    /// return: 转换过后的值
    func transformToJSON(_ value: Object?) -> JSON?
    

    AlamofireObjectMapper已经提供了一些基本的类型转换,比如:

    DictionaryTransform

    EnumTransform

    DateTransform

    DateFormatterTransform

    DataTransform

    CustomDateFormatTransform

    当然,我们还可以自定义TransformType。在接收服务器传的数据时,总会遇到客户端需要的是字符串,可是服务器传过来的确是数字,如果我们希望在对象映射完成后,属性值即为字符串,就可以自定义一个StringTransform。

    /// 为了避免重名,最好加前缀
    class CT_StringTransform: TransformType {
        /// 指定Json中的值类型为任意类型
        typealias JSON = Any
        /// 指定对象中的属性类型为String类型
        typealias Object = String
        /// 将Json中的value转换为属性能接受的String类型
        func transformFromJSON(_ value: Any?) -> String? {
        /// value的类型判断
            switch value {
           /// 如果是NSNull,直接返回nil,也可以根据需要返回空字符串""
            case is NSNull:return nil
             /// 如果value遵循CustomStringConvertible协议,获取value的description并返回
            case is CustomStringConvertible:
                return (value as! CustomStringConvertible).description
            default:break
            }
            /// 其他的情况,返回nil,也可以根据需要返回空字符串
            return nil
        }
        /// 对象的属性转json中value
        func transformToJSON(_ value: String?) -> Any? {
            /// 由于我的业务不需要特殊处理,因此直接返回字符串,可以根据需要,转成特定类型的值
            return value
        }
    }
    

    未完待续··· ···

    相关文章

      网友评论

          本文标题:TransformType

          本文链接:https://www.haomeiwen.com/subject/vfaezqtx.html