CodingKeys til omdøbning
Map forskellige JSON-navne og egenskabsnavne.
CodingKeys til omdøbning er en gratis Swift Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Swift Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Swift Academy-kurset indeholder 4 lektioner i alt.
Hvorfor omdøbe nøgler?
JSON-API'er bruger ofte navne, der adskiller sig fra dine Swift-egenskabsnavne — first_name i stedet for firstName. En CodingKeys-enum forbinder de to uden at ændre din models API.
import Foundation
struct User: Codable {
var firstName: String
enum CodingKeys: String, CodingKey {
case firstName = "first_name"
}
}
print("CodingKeys maps firstName to first_name")Opbygningen af CodingKeys
CodingKeys er en indlejret enum, der overholder String, CodingKey. Hver case svarer til et egenskabsnavn; dens råværdi er den JSON-nøgle, der skal bruges.
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)Afkodning med omdøbte nøgler
Under afkodning slår decoderen hver egenskab op ved hjælp af råværdien i CodingKeys, så JSON i snake_case udfylder egenskaber i 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)Kodning med omdøbte nøgler
Kodning bruger den samme tilknytning i omvendt retning: den resulterende JSON indeholder nøglerne fra råværdierne, ikke Swift-egenskabsnavnene.
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)!)Angivelse af alle egenskaber
Når du har tilføjet en CodingKeys-enum, skal den indeholde en case for hver egenskab, du vil kode eller afkode. Cases, du beholder uden en råværdi, bruger egenskabsnavnet uændret.
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)!)Udeladelse af en egenskab
Hvis du udelader en egenskab fra CodingKeys, bliver den udelukket fra kodning og afkodning. En sådan egenskab skal have en standardværdi, så den syntetiserede init stadig kan oprette typen.
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)Omdøbning af flere nøgler
Tilknyt så mange nøgler, som du har brug for. Hver case forbinder en Swift-egenskab med den præcise JSON-nøgle, som serveren forventer.
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)Tilknytning til mere forståelige navne
CodingKeys er ikke kun til snake_case. Brug den til at omdøbe kryptiske API-nøgler til tydelige Swift-egenskabsnavne.
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 med indlejrede typer
Hver Codable-type har sin egen CodingKeys. En indlejret struct kan omdøbe sine egne nøgler uafhængigt af den overordnede type.
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)Tur-retur med omdøbte nøgler
Den samme CodingKeys styrer begge retninger, så en værdi kodes til snake_case og afkodes tilbage til den samme Swift-værdi.
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)Hvornår du bør bruge CodingKeys
Brug en eksplicit CodingKeys-enum, når individuelle nøgler kræver præcis styring, når kun nogle nøgler adskiller sig, eller når du skal udelade en egenskab. For en ensartet snake_case-API kan en afkodningsstrategi være enklere.
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)Hurtig kontrol: CodingKeys
Afprøv din forståelse af omdøbning af nøgler.
Opsummering: CodingKeys til omdøbning
Du har lært at styre nøgler præcist:
- Deklarér
enum CodingKeys: String, CodingKeyindlejret i typen. - Hver cases råværdi er JSON-nøglen; cases styrer både kodning og afkodning.
- Angiv alle egenskaber, du vil kode; hvis du udelader en, bliver den udelukket (den skal have en standardværdi).
- Indlejrede typer har deres egne uafhængige
CodingKeys.
Lær Swift med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 122
- Lektioner
- 409
Ofte stillede spørgsmål
Er lektionen “CodingKeys til omdøbning” gratis?
Ja — alle 3 lektioner i læringssporet Swift Academy, inklusive “CodingKeys til omdøbning”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Swift Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “CodingKeys til omdøbning”?
Map forskellige JSON-navne og egenskabsnavne. Du øver dig i Swift Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Swift Academy?
Der kræves ingen tidligere erfaring. Swift Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “CodingKeys til omdøbning”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Swift Academy-lektion?
Ja. Alle Swift Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- CodingKeys til omdøbning
- Strategier for key- og dato-decoding
- Manuel encode(to:) og init(from:)
- Decoding af heterogen JSON