美文网首页
ObjectMapper模型字段类型转换(Swift)

ObjectMapper模型字段类型转换(Swift)

作者: iLeooooo | 来源:发表于2020-06-18 14:09 被阅读0次

今天在修改接口返回字段的时候发现,不同的接口返回相同内容的字段的类型不一致,导致使用ObjectMapper转换成模型的时候,有一个接口返回的数据转换失败,导致模型的字段为nil。

比如:如下模型的创建

struct MoveResult: Mappable {
    
    var id: String!
    var url:String!
    var share_url:String!
    var operators:String!
    var download:Float!
    var upload:Float!

    init?(map: Map) { }
     
    mutating func mapping(map: Map) {
        id <- map["id"]
        url <- map["url"]
        share_url <- map["share_url"]
        operators <- map["operator"]
        download <- map["download"]
        upload <- map["upload"]
    }
}

其中downloadupload 两个字段在一个接口中返回的是数值类型,在另外一个接口中返回的是字符串类型;此时,你如果在模型中声明的是Float类型,那么在字符串类型的那个接口中,这2个字段的值就是nil,如果声明String类型,在数值类型的那个接口中,这2个字段的值就是nil

解决办法:在模型中创建转换方法

  • Int的转换
public class IntTransform: TransformType {
    public typealias Object = Int
    public typealias JSON = Any?
    public init() {}
    public func transformFromJSON(_ value: Any?) -> Int? {
        var result: Int?
        guard let json = value else {
            return result
        }
        /// 如果是数值类型,小数等,需要用NSNumber
        if json is NSNumber {
            result = (json as! NSNumber).intValue
        }
        if json is Int {
            result = (json as! Int)
        }
        if json is String {
            result = Int(json as! String)
        }
        return result
    }

    public func transformToJSON(_ value: Int?) -> Any?? {
        guard let object = value else {
            return nil
        }
        return String(object)
    }
}
  • Float的转换(与Int类似)
  • Double的转换(与Int类似)

在模型中使用

struct MoveResult: Mappable {
    
    var id: String!
    var url:String!
    var share_url:String!
    var operators:String!
    var download:Float!
    var upload:Float!

    init?(map: Map) { }
     
    mutating func mapping(map: Map) {
        id <- map["id"]
        url <- map["url"]
        share_url <- map["share_url"]
        operators <- map["operator"]
        download <- (map["download"], FloatTransform())
        upload <- (map["upload"], FloatTransform())
    }
}

问题解决!

一步一个巴掌印。。。

相关文章

网友评论

      本文标题:ObjectMapper模型字段类型转换(Swift)

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