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. JSONEncodertworzyData, aJSONDecoderodtwarza 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
- Zgodność z Codable
- Kodowanie za pomocą JSONEncoder
- Dekodowanie za pomocą JSONDecoder
- Obsługa typów optional i zagnieżdżonych