ObjectMapper的使用

作者: iYeso | 来源:发表于2018-01-29 20:02 被阅读2427次

    ObjectMapper-CN-Guide
    ObjectMapper 是一个使用 Swift 编写的用于 model 对象(类和结构体)和 JSON 之间转换的框架。

    一: 特性:

    • 把 JSON 映射成对象
    • 把对象映射 JSON
    • 支持嵌套对象 (单独的成员变量、在数组或字典中都可以)
    • 在转换过程支持自定义规则
    • 支持结构体( Struct )
    • Immutable support (目前还在 beta )

    二: 基础使用方法

    为了支持映射,类或者结构体只需要实现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?                       // 嵌套的 User 对象
        var friends: [User]?                        // 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, ObjectMapper就可以让你轻松的实现和 JSON 之间的转换。
    把 JSON 字符串转成 model 对象:

    let user = User(JSONString: JSONString)
    

    把一个 model 转成 JSON 字符串:

    let JSONString = user.toJSONString(prettyPrint: true)
    

    也可以使用Mapper.swift类来完成转换(这个类还额外提供了一些函数来处理一些特殊的情况:

    // 把 JSON 字符串转成 Model
    let user = Mapper<User>().map(JSONString: JSONString)
    // 根据 Model 生成 JSON 字符串
    let JSONString = Mapper().toJSONString(user, prettyPrint: true)
    

    ObjectMapper支持以下的类型映射到对象中:

    - Int
    - Bool
    - Double
    - Float
    - String
    - RawRepresentable (枚举)
    - 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>>
    - 以上所有的 Optional 类型
    - 以上所有的隐式强制解包类型(Implicitly Unwrapped Optional)
    

    三: Mappable 协议

    mutating func mapping(map: Map)

    所有的映射最后都会调用到这个函数。当解析 JSON 时,这个函数会在对象创建成功后被执行。当生成 JSON 时就只有这个函数会被对象调用。

    init?(map: Map)

    这个可失败的初始化函数是 ObjectMapper 创建对象的时候使用的。开发者可以通过这个函数在映射前校验 JSON 。如果在这个方法里返回 nil 就不会执行 mapping 函数。可以通过传入的保存着 JSON 的 Map 对象进行校验:

    required init?(map: Map){
        // 检查 JSON 里是否有一定要有的 "name" 属性
        if map.JSONDictionary["name"] == nil {
            return nil
        }
    }
    

    四: StaticMappable 协议

    待续~ 困了回家睡觉觉~

    相关文章

      网友评论

        本文标题:ObjectMapper的使用

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