美文网首页
ObjectMapper的使用

ObjectMapper的使用

作者: 蔡俊宇 | 来源:发表于2016-10-02 09:56 被阅读7400次

    关于ObjectMapper

    关于这个第三方库,我也是最近才接触到,在转到swift的项目当中,其实很长时间都在寻找一个适合库来做网络请求回来的JSON解析,但一直都没有找到较好的,所以之前的项目一直都是手动字典转模型,最近发现了一个轻巧又实用的库--而且再多层嵌套,也可以用几句代码完成转换,简直可以媲美OC中字典转模型的第三方框架.

    Github的地址为:https://github.com/Hearst-DD/ObjectMapper

    本文主要是翻译github的内容,大家如果英文阅读能力较好的可以自己翻看英文文档

    基本使用方法

    如果一个类或者结构体的接口实现了Mappable接口的时,便可以支持映射,然后还需要实现协议中的两个接口:

     init?(_ map: Map)mutating 
     func mapping(map: Map)
    

    ObjectMapper实用了一个操作符 "<-"来定义成员变量的映射和JSON的转换.

    class User: Mappable {
     //这里要定义好需要转换的内容相对于的字段和类型,以后日后方便赋值转换
    var username: String?
    var age: Int?
    var weight: Double!
    var array: [AnyObject]?
    var dictionary: [String : AnyObject] = [:]
    var bestFriend: User?                       // Nested User object
    var friends: [User]?                        // Array of Users
    var birthday: NSDate?
    
    required init?(_ map: Map) {
        
    }
    
    // Mappable
    func mapping(map: Map) {
      //根据字典中的内容用"<-"操作符号来映射相应的内容,将其转换到定义好的成员变量中
        username    <- map["username"]
        age         <- map["age"]
        weight      <- map["weight"]
        array       <- map["arr"]
        dictionary  <- map["dict"]
        bestFriend  <- map["best_friend"]
        friends     <- map["friends"]
        birthday    <- (map["birthday"], DateTransform())
     }
    }
     //结构体的话也是执行相应的操作
    struct Temperature: Mappable {
    var celsius: Double?
    var fahrenheit: Double?
    
    init?(_ map: Map) {
        
    }
    
    mutating func mapping(map: Map) {
        celsius     <- map["celsius"]
        fahrenheit  <- map["fahrenheit"]
     }
    }
    

    唔,一旦你的类接口定义了Mappable,那么你这个类就可以调用简答的方法进行字典转模型的转换啦.

    转换一个JSON成相应的类模型:

     let user = User(JSONSting:jsonString)
    

    转换一个模型成相应的字符串:

     let jsonString = user.toJSONString(prettyPrint:true)
    

    除了这种转换方式,Mapper.swfit类还提供了�扩展的方法也可以进行同样的转换:

      // 字典转模型
     let user = Mapper<User>().map(JSONString: JSONString)
     //字典转模型
     let JSONString = Mapper().toJSONString(user, prettyPrint: true)
    

    ObjectMapper支持以下的数据类型

    • Int
    • Bool
    • Double
    • Float
    • String
    • RawRepresentable(Enums)
    • Array<AnyObject>
    • Dictionary<String, AnyObject>
    • Object<T: Mappable>
    • Array<T: Mappable>
    • Array<Array<T: Mappable>>
    • Set<T: Mappable>
    • Dictionary<String, T: Mappable>
    • Dictionary<String, Array<T: Mappable>>
    • Optionals of all the above

    Mappable Protocol

    mutating func mapping(map: Map)
    这个函数里面定义了映射所需要指向的字符串,当解析JSON的过程中,创建好实例对象以后会去执行这个函数,当生成JSON的过程中,这个函数是唯一一个可以被叫做对象.

    init?(_ map: Map)

    //翻译未完成,待续...其实ObjectMapper的使用非常简单,只要字符串和相对应的Object一一对应即可...

    相关文章

      网友评论

          本文标题:ObjectMapper的使用

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