Buscar..
Introducción
Codable se agrega con Xcode 9, iOS 11 y Swift 4. Codable se usa para hacer que sus tipos de datos sean codificables y decodificables para la compatibilidad con representaciones externas como JSON.
Uso codificable para admitir tanto la codificación como la decodificación, declare la conformidad con Codable, que combina los protocolos Encodable y Decodable. Este proceso se conoce como hacer codificables tus tipos.
Uso de Codable con JSONEncoder y JSONDecoder en Swift 4
Tomemos un ejemplo con la estructura de la película, aquí hemos definido la estructura como codificable. Así, podemos codificarlo y decodificarlo fácilmente.
struct Movie: Codable {
enum MovieGenere: String, Codable {
case horror, skifi, comedy, adventure, animation
}
var name : String
var moviesGenere : [MovieGenere]
var rating : Int
}
Podemos crear un objeto a partir de la película como:
let upMovie = Movie(name: "Up", moviesGenere: [.comedy , .adventure, .animation], rating : 4)
El upMovie contiene el nombre "Up" y es movieGenere es comedia, aventura y animación que contiene 4 calificaciones de 5.
Codificar
JSONEncoder es un objeto que codifica instancias de un tipo de datos como objetos JSON. JSONEncoder soporta el objeto codificable.
// 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 nos dará los datos JSON que se utilizan para recuperar la cadena JSON.
La cadena de salida será como:
{
"name": "Up",
"moviesGenere": [
"comedy",
"adventure",
"animation"
],
"rating": 4
}
Descodificar
JSONDecoder es un objeto que decodifica instancias de un tipo de datos de objetos JSON. Podemos recuperar el objeto de la cadena 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 {
}
Al decodificar JSONData, recibiremos el objeto Movie nuevamente. Así podemos obtener todos los valores que se guardan en ese objeto.
La salida será como:
Name : Up
Rating : 4