在 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