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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow