0Pricing
Swift Academy · Lezione

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, CodingKey all'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 CodingKeys indipendente.

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

  1. CodingKeys per rinominare
  2. Strategie di decodifica per chiavi e date
  3. encode(to:) e init(from:) manuali
  4. Decodifica di JSON eterogenei
← Torna a Swift Academy