Codable-protokollan toteuttaminen
Tee tyypeistä automaattisesti koodattavia ja dekoodattavia.
Codable-protokollan toteuttaminen on ilmainen Swift Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Swift Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Swift Academy-kurssilla on yhteensä 4 oppituntia.
Mikä Codable on?
Codable on tyyppialias, joka yhdistää protokollat Encodable & Decodable. Kun tyyppi noudattaa sitä, Swift voi muuntaa ilmentymät ulkoiseksi dataksi, kuten JSON-muotoon, ja muodostaa ne uudelleen ilman manuaalista jäsentämiskoodia.
import Foundation
struct Book: Codable {
var title: String
var pages: Int
}
print("Book conforms to Codable")Automaattinen generointi
Jos jokainen tallennettu ominaisuus toteuttaa itse Codable-protokollan, kääntäjä generoi koodaus- ja purkamislogiikan puolestanne. Teidän tarvitsee kirjoittaa vain ominaisuusluettelo — Swift täydentää loput.
import Foundation
struct User: Codable {
var name: String
var age: Int
var isActive: Bool
}
let u = User(name: "Ada", age: 36, isActive: true)
print(u)Koodaus JSON-dataksi
Codable-arvon voi antaa JSONEncoder-kooderille, joka tuottaa Data-tietosisällön. Muuntakaa kyseinen Data String-merkkijonoksi, jotta voitte tarkastella JSON-tekstiä.
import Foundation
struct User: Codable {
var name: String
var age: Int
}
let u = User(name: "Ada", age: 36)
let data = try JSONEncoder().encode(u)
print(String(data: data, encoding: .utf8)!)JSON-datan purkaminen
Käänteiseen toimintoon käytetään JSONDecoder-purkajaa. Antakaa sille kohdetyyppi ja raaka Data, niin se muodostaa uudelleen täysin tyypitetyn Swift-arvon.
import Foundation
struct User: Codable {
var name: String
var age: Int
}
let json = "{\"name\":\"Ada\",\"age\":36}"
let data = json.data(using: .utf8)!
let u = try JSONDecoder().decode(User.self, from: data)
print(u.name, u.age)Arvon koodaus ja purkaminen
Koodauksen ja sitä seuraavan purkamisen pitäisi palauttaa samaa vastaava arvo. Tämä edestakainen kierros on nopea tapa varmistaa, että tyypin Codable-toteutus toimii odotetusti.
import Foundation
struct Point: Codable {
var x: Int
var y: Int
}
let p = Point(x: 3, y: 7)
let data = try JSONEncoder().encode(p)
let back = try JSONDecoder().decode(Point.self, from: data)
print(back.x, back.y)Vain Encodable
Voitte toteuttaa vain toisen puoliskon. Encodable tarkoittaa, että tyypin voi kirjoittaa ulos, mutta sitä ei voi lukea takaisin — tämä on kätevää vastausmalleille, joita ei tarvitse koskaan jäsentää.
import Foundation
struct Receipt: Encodable {
var item: String
var total: Double
}
let r = Receipt(item: "Coffee", total: 4.5)
let data = try JSONEncoder().encode(r)
print(String(data: data, encoding: .utf8)!)Vain Decodable
Vastaavasti Decodable mahdollistaa tyypin muodostamisen ulkoisesta datasta ilman, että tyyppiä voi koodata. Tämä on hyödyllistä vain luettaville API-hyötykuormille, joita ainoastaan käsitellään.
import Foundation
struct Config: Decodable {
var version: Int
var debug: Bool
}
let json = "{\"version\":2,\"debug\":true}"
let data = json.data(using: .utf8)!
let c = try JSONDecoder().decode(Config.self, from: data)
print(c.version, c.debug)Tuetut ominaisuustyypit
Vakiokirjaston tyypit, kuten String, Int, Double, Bool, Date, Data ja URL, sekä Codable-alkioita sisältävät taulukot ja sanakirjat toteuttavat kaikki Codable-protokollan valmiiksi.
import Foundation
struct Profile: Codable {
var name: String
var tags: [String]
var scores: [String: Int]
}
let p = Profile(name: "Sam", tags: ["a", "b"], scores: ["math": 90])
let data = try JSONEncoder().encode(p)
print(String(data: data, encoding: .utf8)!)Myös enumeraatiot voivat toteuttaa protokollan
Raaka-arvoja, kuten String- tai Int-arvoja, käyttävä enumeraatio muuttuu automaattisesti Codable-tyypiksi. Se koodataan JSONissa raaka-arvonsa muodossa.
import Foundation
enum Status: String, Codable {
case active, paused, done
}
struct Task: Codable {
var title: String
var status: Status
}
let t = Task(title: "Ship", status: .active)
let data = try JSONEncoder().encode(t)
print(String(data: data, encoding: .utf8)!)Ominaisuuden on oltava Codable
Automaattinen generointi toimii vain, kun kaikki tallennetut ominaisuudet ovat Codable-tyyppejä. Jos ominaisuutena käytetään mukautettua tyyppiä, senkin on toteutettava protokolla — muuten kääntäjä kieltäytyy generoimasta toteutusta.
import Foundation
struct Address: Codable {
var city: String
}
struct Person: Codable {
var name: String
var address: Address
}
let p = Person(name: "Lee", address: Address(city: "Rome"))
print(try JSONEncoder().encode(p).count, "bytes")Miksi Codable on tärkeä
Codable poistaa käsin kirjoitettavan sarjallistamisen vakiokoodin, pitää tyypin ainoana totuuden lähteenä ja havaitsee yhteensopimattomuudet käännösaikana. Se on vakiotapa siirtää dataa Swift-sovelluksiin ja niistä pois.
import Foundation
struct Settings: Codable {
var theme: String
var fontSize: Int
}
let s = Settings(theme: "dark", fontSize: 14)
let data = try JSONEncoder().encode(s)
let back = try JSONDecoder().decode(Settings.self, from: data)
print(back.theme, back.fontSize)Pikatarkistus: Codable-protokollan toteuttaminen
Testatkaa, mitä opitte protokollan toteuttamisesta.
Kertaus: Codable-protokollan toteuttaminen
Opitte Swiftin sarjallistamisen perusteet:
Codable=Encodable & Decodable.- Toteutus generoidaan automaattisesti, kun kaikki ominaisuudet ovat
Codable-tyyppejä. JSONEncodertuottaaData-tietosisällön jaJSONDecodermuodostaa arvon uudelleen.- Vakiotyypit, raaka-arvoa käyttävät enumeraatiot ja sisäkkäiset
Codable-tyypit ovat kaikki tuettuja.
Opi Swift tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 122
- Oppitunnit
- 409
Usein kysytyt kysymykset
Onko oppitunti ”Codable-protokollan toteuttaminen” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Swift Academy-oppimispolun 3 oppituntia, myös oppitunnin “Codable-protokollan toteuttaminen”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Swift Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Codable-protokollan toteuttaminen”?
Tee tyypeistä automaattisesti koodattavia ja dekoodattavia. Harjoittelet Swift Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Swift Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Swift Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”Codable-protokollan toteuttaminen”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Swift Academy-oppitunnilla?
Kyllä. Jokainen Swift Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Codable-protokollan toteuttaminen
- Koodaus JSONEncoderilla
- Dekoodaus JSONDecoderilla
- Optionaalien ja sisäkkäisten tyyppien käsittely