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
}
}
网友评论