Swift Academy · Lektion

CodingKeys til omdøbning

Map forskellige JSON-navne og egenskabsnavne.

Lektion 1 af 413 trin

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, CodingKey indlejret 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.
Gratis at komme i gang

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

  1. CodingKeys til omdøbning
  2. Strategier for key- og dato-decoding
  3. Manuel encode(to:) og init(from:)
  4. Decoding af heterogen JSON
← Tilbage til Swift Academy