美文网首页
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

    TransformType是AlamofireObjectMapper定义的用于类型转换的协议。在做Json与对象...

网友评论

      本文标题:TransformType

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