0Pricing
Swift Academy · Lekcja

Zgodność z Codable

Automatyczne umożliwianie typom kodowania i dekodowania.

Zgodność z Codable to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.

Czym jest Codable?

Codable to alias typu dla Encodable & Decodable. Gdy typ jest z nim zgodny, Swift może przekształcać jego instancje w dane zewnętrzne, takie jak JSON, a następnie odtwarzać je — bez konieczności ręcznego pisania kodu do analizy danych.

import Foundation

struct Book: Codable {
    var title: String
    var pages: Int
}

print("Book conforms to Codable")

Automatyczna synteza

Jeśli każda przechowywana właściwość jest typu Codable, kompilator automatycznie tworzy za Państwa logikę kodowania i dekodowania. Wystarczy zdefiniować listę właściwości — Swift zajmie się resztą.

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)

Kodowanie do danych JSON

Wartość typu Codable można przekazać do obiektu JSONEncoder, który tworzy obiekt Data. Aby wyświetlić tekst JSON, należy przekształcić ten obiekt Data w String.

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)!)

Dekodowanie z danych JSON

Odwrotny proces wykorzystuje JSONDecoder. Należy przekazać mu typ docelowy oraz surowe dane Data, a odtworzy w pełni typowaną wartość Swift.

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)

Pełny cykl kodowania i dekodowania wartości

Zakodowanie, a następnie zdekodowanie wartości powinno zwrócić wartość równą oryginałowi. Taki pełny cykl to szybki sposób na sprawdzenie, czy zgodność typu z Codable działa zgodnie z oczekiwaniami.

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)

Tylko Encodable

Można zaimplementować tylko jedną część. Encodable oznacza, że typ można zapisać, ale nie można go odczytać — jest to przydatne w przypadku modeli odpowiedzi, których nie trzeba nigdy analizować.

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)!)

Tylko Decodable

Podobnie Decodable umożliwia utworzenie typu na podstawie danych zewnętrznych, ale bez możliwości jego kodowania. Jest to przydatne w przypadku tylko do odczytu danych z API, które są wyłącznie pobierane.

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)

Obsługiwane typy właściwości

Typy biblioteki standardowej, takie jak String, Int, Double, Bool, Date, Data i URL, a także tablice i słowniki elementów Codable, są domyślnie zgodne z Codable.

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)!)

Enumy również mogą być zgodne

Enum z wartościami surowymi, takimi jak String lub Int, automatycznie staje się zgodny z Codable. W formacie JSON jest kodowany jako jego wartość surowa.

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)!)

Właściwość musi być Codable

Synteza działa tylko wtedy, gdy wszystkie przechowywane właściwości są zgodne z Codable. Jeśli właściwość ma typ niestandardowy, ten typ również musi być zgodny z Codable — w przeciwnym razie kompilator odmówi przeprowadzenia syntezy.

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")

Dlaczego Codable ma znaczenie

Codable eliminuje ręcznie pisany kod pomocniczy do serializacji, utrzymuje typ jako pojedyncze źródło prawdy i wykrywa niezgodności podczas kompilacji. Jest to standardowy sposób przesyłania danych do aplikacji Swift i z nich.

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)

Szybkie sprawdzenie: zgodność z Codable

Sprawdź swoją wiedzę na temat zgodności z protokołem.

Podsumowanie: zgodność z Codable

Poznałeś podstawy serializacji w Swift:

  • Codable = Encodable & Decodable.
  • Zgodność jest tworzona automatycznie, gdy wszystkie właściwości są zgodne z Codable.
  • JSONEncoder tworzy Data, a JSONDecoder odtwarza wartość.
  • Obsługiwane są typy standardowe, enumy z wartościami surowymi oraz zagnieżdżone typy Codable.

Często zadawane pytania

Czy lekcja „Zgodność z Codable” jest bezpłatna?

Tak — pełny tekst „Zgodność z Codable” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Zgodność z Codable”?

Automatyczne umożliwianie typom kodowania i dekodowania. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Zgodność z Codable”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Zgodność z Codable
  2. Kodowanie za pomocą JSONEncoder
  3. Dekodowanie za pomocą JSONDecoder
  4. Obsługa typów optional i zagnieżdżonych
← Powrót do Swift Academy