Szukaj…


Wprowadzenie

Codable jest dodawany do Xcode 9, iOS 11 i Swift 4. Codable służy do kodowania i dekodowania typów danych w celu zapewnienia zgodności z zewnętrznymi reprezentacjami, takimi jak JSON.

Zastosowanie kodowalne do obsługi zarówno kodowania, jak i dekodowania, deklaruje zgodność z kodowaniem, który łączy protokoły kodowania i dekodowania. Ten proces jest znany jako kodowanie typów.

Korzystanie z Codable z JSONEncoder i JSONDecoder w Swift 4

Weźmy przykład ze strukturą filmu, tutaj zdefiniowaliśmy tę strukturę jako kodowalną. Możemy więc łatwo kodować i dekodować.

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

Możemy stworzyć obiekt z filmu, taki jak:

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

UpMovie zawiera nazwę „Up”, a jego film Genere to komedia, przygoda i animacja z 4 ocenami na 5.

Kodować

JSONEncoder to obiekt, który koduje instancje typu danych jako obiekty JSON. JSONEncoder obsługuje obiekt 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 poda nam dane JSON, które są używane do pobierania ciągu JSON.

Łańcuch wyjściowy będzie wyglądał następująco:

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

Rozszyfrować

JSONDecoder to obiekt, który dekoduje instancje typu danych z obiektów JSON. Możemy odzyskać obiekt z ciągu 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 {
}

Dekodując JSONData otrzymamy z powrotem obiekt Movie. Możemy więc uzyskać wszystkie wartości zapisane w tym obiekcie.

Dane wyjściowe będą wyglądać następująco:

Name : Up
Rating : 4


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow