在 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