在 Swift 4 中使用 Codable 与 JSONEncoder 和 JSONDecoder

让我们以电影结构为例,在这里我们将结构定义为 Codable。因此,我们可以轻松编码和解码它。

struct Movie: Codable {
    enum MovieGenere: String, Codable {
        case horror, skifi, comedy, adventure, animation
    }
    
    var name : String
    var moviesGenere : [MovieGenere]
    var rating : Int
}

我们可以从电影创建一个对象,如:

let upMovie = Movie(name: "Up", moviesGenere: [.comedy , .adventure, .animation], rating : 4)

upMovie 包含名称 Up,它的 movieGenere 是喜剧,冒险和动画女巫包含 4 评级中的 5。

编码

JSONEncoder 是一个将数据类型的实例编码为 JSON 对象的对象。JSONEncoder 支持 Codable 对象。

// Encode data
let jsonEncoder = JSONEncoder()
do {
    let jsonData = try jsonEncoder.encode(upMovie)
    let jsonString = String(data: jsonData, encoding: .utf8)
    print("JSON String : " + jsonString!)
}
catch {
}

JSONEncoder 将为我们提供用于检索 JSON 字符串的 JSON 数据。

输出字符串将如下:

{
  "name": "Up",
  "moviesGenere": [
    "comedy",
    "adventure",
    "animation"
  ],
  "rating": 4
}

解码

JSONDecoder 是一个从 JSON 对象解码数据类型实例的对象。我们可以从 JSON 字符串中获取对象。

do {
    // Decode data to object
    
    let jsonDecoder = JSONDecoder()
    let upMovie = try jsonDecoder.decode(Movie.self, from: jsonData)
    print("Rating : \(upMovie.name)")
    print("Rating : \(upMovie.rating)")
}
catch {
}

通过解码 JSONData,我们将收回 Movie 对象。因此,我们可以获得该对象中保存的所有值。

输出将如下:

Name : Up
Rating : 4