CodingKeys per rinominare
Mappi nomi diversi tra JSON e proprietà.
CodingKeys per rinominare è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.
Perché rinominare le chiavi?
Le API JSON usano spesso nomi diversi da quelli delle proprietà Swift, come first_name e firstName. Un'enumerazione CodingKeys collega i due nomi senza modificare l'API del modello.
import Foundation
struct User: Codable {
var firstName: String
enum CodingKeys: String, CodingKey {
case firstName = "first_name"
}
}
print("CodingKeys maps firstName to first_name")Anatomia di CodingKeys
CodingKeys è un'enumerazione annidata conforme a String, CodingKey. Ogni caso corrisponde al nome di una proprietà; il suo valore grezzo è la chiave JSON da utilizzare.
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)Decodifica con chiavi rinominate
Durante la decodifica, il decoder cerca ogni proprietà utilizzando il valore grezzo definito in CodingKeys; in questo modo il JSON in snake_case valorizza le proprietà in 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)Codifica con chiavi rinominate
La codifica utilizza la stessa mappatura al contrario: il JSON risultante contiene le chiavi corrispondenti ai valori grezzi, non i nomi delle proprietà 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)!)Elenco di tutte le proprietà
Dopo aver aggiunto un'enumerazione CodingKeys, questa deve includere un caso per ogni proprietà che si desidera codificare o decodificare. I casi mantenuti senza valore grezzo utilizzano invariato il nome della proprietà.
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)!)Omissione di una proprietà
Escludere una proprietà da CodingKeys la esclude dalla codifica e dalla decodifica. Tale proprietà deve avere un valore predefinito, affinché l'inizializzatore sintetizzato possa comunque creare il tipo.
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)Ridenominazione di più chiavi
È possibile mappare tutte le chiavi necessarie. Ogni caso associa una proprietà Swift alla chiave JSON esatta prevista dal 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)Mappatura a nomi più chiari
CodingKeys non serve soltanto per snake_case. Lo utilizzi per trasformare chiavi API poco chiare in nomi di proprietà Swift espliciti.
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 con tipi annidati
Ogni tipo Codable ha il proprio CodingKeys. Una struct annidata può rinominare autonomamente le proprie chiavi, indipendentemente da quelle del tipo contenitore.
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)Conversione completa con chiavi rinominate
Lo stesso CodingKeys gestisce entrambe le direzioni, quindi un valore viene codificato in snake_case e decodificato nuovamente nello stesso valore Swift.
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)Quando utilizzare CodingKeys
Utilizzi un'enumerazione CodingKeys esplicita quando è necessario controllare con precisione singole chiavi, quando solo alcune chiavi sono diverse o quando deve omettere una proprietà. Per un'API uniformemente in snake_case, una strategia di decodifica può essere più semplice.
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)Verifica rapida: CodingKeys
Verifichi la Sua comprensione della ridenominazione delle chiavi.
Riepilogo: CodingKeys per la ridenominazione
Ha imparato a controllare con precisione le chiavi:
- Dichiari
enum CodingKeys: String, CodingKeyall'interno del tipo. - Il valore grezzo di ogni caso è la chiave JSON; i casi gestiscono sia la codifica sia la decodifica.
- Inserisca ogni proprietà che desidera codificare; ometterne una la esclude e richiede un valore predefinito.
- I tipi annidati hanno il proprio
CodingKeysindipendente.
Domande Frequenti
La lezione «CodingKeys per rinominare» è gratuita?
Sì — il testo completo di «CodingKeys per rinominare» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.
Cosa imparerò in «CodingKeys per rinominare»?
Mappi nomi diversi tra JSON e proprietà. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Swift Academy?
Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «CodingKeys per rinominare»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Swift Academy?
Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- CodingKeys per rinominare
- Strategie di decodifica per chiavi e date
- encode(to:) e init(from:) manuali
- Decodifica di JSON eterogenei