CodingKeys untuk Penggantian Nama
Petakan nama JSON dan properti yang berbeda.
CodingKeys untuk Penggantian Nama adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.
Mengapa Mengganti Nama Kunci?
API JSON sering menggunakan nama yang berbeda dari nama properti Swift Anda—first_name dibandingkan dengan firstName. Enumerasi CodingKeys menjembatani keduanya tanpa mengubah API model Anda.
import Foundation
struct User: Codable {
var firstName: String
enum CodingKeys: String, CodingKey {
case firstName = "first_name"
}
}
print("CodingKeys maps firstName to first_name")Struktur CodingKeys
CodingKeys adalah enumerasi bertingkat yang memenuhi konformansi String, CodingKey. Setiap kasus cocok dengan nama properti; nilai mentahnya adalah kunci JSON yang akan digunakan.
import Foundation
struct Product: Codable {
var productName: String
var unitPrice: Double
enum CodingKeys: String, CodingKey {
case productName = "product_name"
case unitPrice = "unit_price"
}
}
print(Product.CodingKeys.productName.rawValue)Mendekode dengan Kunci yang Diganti Namanya
Saat mendekode, decoder mencari setiap properti menggunakan nilai mentah dalam CodingKeys, sehingga JSON snake_case mengisi properti camelCase.
import Foundation
struct User: Codable {
var firstName: String
enum CodingKeys: String, CodingKey {
case firstName = "first_name"
}
}
let json = "{\"first_name\":\"Ada\"}"
let u = try JSONDecoder().decode(User.self, from: json.data(using: .utf8)!)
print(u.firstName)Mengodekan dengan Kunci yang Diganti Namanya
Pengodean menggunakan pemetaan yang sama secara terbalik: JSON keluaran berisi kunci bernilai mentah, bukan nama properti Swift.
import Foundation
struct User: Codable {
var firstName: String
enum CodingKeys: String, CodingKey {
case firstName = "first_name"
}
}
let data = try JSONEncoder().encode(User(firstName: "Ada"))
print(String(data: data, encoding: .utf8)!)Mencantumkan Semua Properti
Setelah menambahkan enumerasi CodingKeys, enumerasi tersebut harus menyertakan kasus untuk setiap properti yang ingin Anda enkode atau dekode. Kasus yang dipertahankan tanpa nilai mentah menggunakan nama properti apa adanya.
import Foundation
struct Item: Codable {
var id: Int
var displayName: String
enum CodingKeys: String, CodingKey {
case id
case displayName = "display_name"
}
}
let data = try JSONEncoder().encode(Item(id: 1, displayName: "Pen"))
print(String(data: data, encoding: .utf8)!)Menghilangkan Properti
Mengeluarkan suatu properti dari CodingKeys mengecualikannya dari pengodean dan dekode. Properti tersebut harus memiliki nilai bawaan agar penginisialisasi yang disintesis tetap dapat membentuk jenis tersebut.
import Foundation
struct User: Codable {
var name: String
var cachedToken: String = "none"
enum CodingKeys: String, CodingKey {
case name
}
}
let u = try JSONDecoder().decode(User.self, from: "{\"name\":\"Ada\"}".data(using: .utf8)!)
print(u.name, u.cachedToken)Mengganti Nama Banyak Kunci
Petakan sebanyak mungkin kunci yang Anda perlukan. Setiap kasus memasangkan properti Swift dengan kunci JSON persis seperti yang diharapkan server.
import Foundation
struct Account: Codable {
var userId: Int
var isVerified: Bool
enum CodingKeys: String, CodingKey {
case userId = "user_id"
case isVerified = "is_verified"
}
}
let json = "{\"user_id\":7,\"is_verified\":true}"
let a = try JSONDecoder().decode(Account.self, from: json.data(using: .utf8)!)
print(a.userId, a.isVerified)Memetakan ke Nama yang Lebih Jelas
CodingKeys bukan hanya untuk snake_case. Gunakan untuk mengganti nama kunci API yang sulit dipahami menjadi nama properti Swift yang jelas.
import Foundation
struct Reading: Codable {
var temperature: Double
enum CodingKeys: String, CodingKey {
case temperature = "t"
}
}
let json = "{\"t\":19.5}"
let r = try JSONDecoder().decode(Reading.self, from: json.data(using: .utf8)!)
print(r.temperature)CodingKeys dengan Jenis Bertingkat
Setiap jenis Codable memiliki CodingKeys sendiri. Struktur bertingkat dapat mengganti nama kuncinya sendiri secara independen dari induknya.
import Foundation
struct Meta: Codable {
var createdAt: String
enum CodingKeys: String, CodingKey { case createdAt = "created_at" }
}
struct Doc: Codable { var title: String; var meta: Meta }
let json = "{\"title\":\"A\",\"meta\":{\"created_at\":\"today\"}}"
let d = try JSONDecoder().decode(Doc.self, from: json.data(using: .utf8)!)
print(d.meta.createdAt)Putar Balik dengan Kunci yang Diganti Namanya
CodingKeys yang sama mengatur kedua arah, sehingga suatu nilai dienkode menjadi snake_case dan didekode kembali menjadi nilai Swift yang sama.
import Foundation
struct User: Codable {
var firstName: String
var lastName: String
enum CodingKeys: String, CodingKey {
case firstName = "first_name"
case lastName = "last_name"
}
}
let u = User(firstName: "Ada", lastName: "Lovelace")
let data = try JSONEncoder().encode(u)
let back = try JSONDecoder().decode(User.self, from: data)
print(back.firstName, back.lastName)Kapan Menggunakan CodingKeys
Gunakan enumerasi CodingKeys eksplisit ketika setiap kunci memerlukan pengendalian yang tepat, ketika hanya beberapa kunci yang berbeda, atau ketika Anda harus menghilangkan suatu properti. Untuk API snake_case yang seragam, strategi dekode mungkin lebih sederhana.
import Foundation
struct Event: Codable {
var eventName: String
var startTime: String
enum CodingKeys: String, CodingKey {
case eventName = "name"
case startTime = "start_time"
}
}
let json = "{\"name\":\"Launch\",\"start_time\":\"10:00\"}"
let e = try JSONDecoder().decode(Event.self, from: json.data(using: .utf8)!)
print(e.eventName, e.startTime)Pemeriksaan Cepat: CodingKeys
Uji pemahaman Anda tentang penggantian nama kunci.
Ringkasan: CodingKeys untuk Penggantian Nama
Anda telah mempelajari pengendalian kunci secara tepat:
- Nyatakan
enum CodingKeys: String, CodingKeydi dalam jenis. - Nilai mentah setiap kasus adalah kunci JSON; kasus-kasus tersebut mengatur pengodean dan dekode.
- Cantumkan setiap properti yang ingin Anda kodekan; menghilangkan satu properti akan mengecualikannya (properti tersebut memerlukan nilai bawaan).
- Jenis bertingkat memiliki
CodingKeysindependen masing-masing.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “CodingKeys untuk Penggantian Nama” gratis?
Ya — teks lengkap “CodingKeys untuk Penggantian Nama” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “CodingKeys untuk Penggantian Nama”?
Petakan nama JSON dan properti yang berbeda. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Swift Academy?
Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “CodingKeys untuk Penggantian Nama” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- CodingKeys untuk Penggantian Nama
- Strategi Pendekodean Kunci dan Tanggal
- encode(to:) dan init(from:) Manual
- Mendekodekan JSON Heterogen