0Pricing
Swift Academy · Pelajaran

Strategi Pendekodean Kunci dan Tanggal

Gunakan snake_case dan strategi tanggal.

Strategi Pendekodean Kunci dan Tanggal adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.

Ikhtisar Strategi Dekode

Alih-alih menulis enumerasi CodingKeys untuk setiap tipe, Anda dapat menetapkan strategi global pada dekoder. Strategi mengubah kunci dan mengurai tanggal secara seragam pada semua tipe yang didekode.

import Foundation

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
print("Strategy configured")

convertFromSnakeCase

Menetapkan keyDecodingStrategy = .convertFromSnakeCase secara otomatis memetakan kunci seperti first_name ke properti camelCase firstName—Anda tidak memerlukan CodingKeys.

import Foundation

struct User: Codable {
    var firstName: String
    var lastName: String
}

let json = "{\"first_name\":\"Ada\",\"last_name\":\"Lovelace\"}"
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let u = try decoder.decode(User.self, from: json.data(using: .utf8)!)
print(u.firstName, u.lastName)

Enkode ke Format snake_case

Enkoder memiliki opsi kebalikannya: keyEncodingStrategy = .convertToSnakeCase menulis properti camelCase sebagai kunci JSON snake_case.

import Foundation

struct User: Codable {
    var firstName: String
}

let encoder = JSONEncoder()
encoder.keyEncodingStrategy = .convertToSnakeCase
let data = try encoder.encode(User(firstName: "Ada"))
print(String(data: data, encoding: .utf8)!)

Strategi Berlaku untuk Semua Kunci

Strategi kunci berlaku secara seragam untuk setiap properti dari setiap tipe bertingkat. Ini ideal ketika seluruh API menggunakan snake_case secara konsisten.

import Foundation

struct Meta: Codable { var createdAt: String }
struct Doc: Codable { var docTitle: String; var docMeta: Meta }

let json = "{\"doc_title\":\"A\",\"doc_meta\":{\"created_at\":\"now\"}}"
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let d = try decoder.decode(Doc.self, from: json.data(using: .utf8)!)
print(d.docTitle, d.docMeta.createdAt)

Masalah Tanggal

JSON tidak memiliki tipe tanggal. Nilai Date dienkode sebagai angka atau string, dan dekoder perlu mengetahui formatnya. dateDecodingStrategy memberi tahu dekoder cara menguraikannya.

import Foundation

struct Event: Codable {
    var name: String
    var date: Date
}

print("Date needs a strategy to parse")

Dekode Tanggal iso8601

dateDecodingStrategy = .iso8601 mengurai stempel waktu ISO-8601 standar seperti 2020-01-01T00:00:00Z menjadi nilai Date.

import Foundation

struct Event: Codable {
    var name: String
    var date: Date
}

let json = "{\"name\":\"Launch\",\"date\":\"2020-01-01T00:00:00Z\"}"
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
let e = try decoder.decode(Event.self, from: json.data(using: .utf8)!)
print(e.date.timeIntervalSince1970)

Enkode Tanggal iso8601

Padanan pada enkoder adalah dateEncodingStrategy = .iso8601, yang menulis nilai Date sebagai string ISO-8601.

import Foundation

struct Event: Codable {
    var name: String
    var date: Date
}

let e = Event(name: "Launch", date: Date(timeIntervalSince1970: 1577836800))
let encoder = JSONEncoder()
encoder.dateEncodingStrategy = .iso8601
let data = try encoder.encode(e)
print(String(data: data, encoding: .utf8)!)

Strategi secondsSince1970

Jika API mengirim stempel waktu Unix sebagai angka, gunakan .secondsSince1970 untuk menafsirkannya sebagai detik sejak epok.

import Foundation

struct Event: Codable {
    var date: Date
}

let json = "{\"date\":1577836800}"
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .secondsSince1970
let e = try decoder.decode(Event.self, from: json.data(using: .utf8)!)
print(e.date.timeIntervalSince1970)

Format Tanggal Kustom

Untuk format nonstandar, berikan DateFormatter melalui .formatted(_:). Ini menangani tanggal seperti 2020-01-01 yang tidak memiliki komponen waktu.

import Foundation

struct Event: Codable { var date: Date }

let fmt = DateFormatter()
fmt.dateFormat = "yyyy-MM-dd"
fmt.timeZone = TimeZone(identifier: "UTC")
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .formatted(fmt)
let e = try decoder.decode(Event.self, from: "{\"date\":\"2020-01-01\"}".data(using: .utf8)!)
print(e.date.timeIntervalSince1970)

Menggabungkan Strategi

Strategi kunci dan tanggal dapat ditetapkan bersama pada dekoder yang sama, sehingga Anda dapat menangani API snake_case dengan ISO-8601 tanpa kode berulang untuk setiap tipe.

import Foundation

struct LogEntry: Codable {
    var eventName: String
    var occurredAt: Date
}

let json = "{\"event_name\":\"login\",\"occurred_at\":\"2020-01-01T00:00:00Z\"}"
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
decoder.dateDecodingStrategy = .iso8601
let entry = try decoder.decode(LogEntry.self, from: json.data(using: .utf8)!)
print(entry.eventName, entry.occurredAt.timeIntervalSince1970)

Strategi vs CodingKeys

Strategi global ringkas untuk API yang seragam. Jika hanya beberapa kunci yang berbeda atau namanya tidak beraturan, enumerasi CodingKeys eksplisit memberi kendali yang tepat untuk setiap kunci. Keduanya bahkan dapat digabungkan.

import Foundation

struct Item: Codable {
    var itemName: String
}

let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let i = try decoder.decode(Item.self, from: "{\"item_name\":\"Pen\"}".data(using: .utf8)!)
print(i.itemName)

Pemeriksaan Cepat: Strategi

Uji pemahaman Anda tentang strategi dekode.

Rangkuman: Strategi Kunci dan Tanggal

Anda telah mempelajari konfigurasi pengode global:

  • keyDecodingStrategy = .convertFromSnakeCase memetakan snake_case ke camelCase; .convertToSnakeCase melakukan enkode ke arah sebaliknya.
  • dateDecodingStrategy = .iso8601 mengurai stempel waktu ISO; .secondsSince1970 dan .formatted(_:) menangani format lainnya.
  • Strategi berlaku secara seragam untuk setiap tipe bertingkat.
  • Gunakan strategi untuk API yang seragam dan CodingKeys untuk API yang tidak beraturan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Strategi Pendekodean Kunci dan Tanggal” gratis?

Ya — teks lengkap “Strategi Pendekodean Kunci dan Tanggal” 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 “Strategi Pendekodean Kunci dan Tanggal”?

Gunakan snake_case dan strategi tanggal. 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 2 dari 4.

Berapa lama pelajaran “Strategi Pendekodean Kunci dan Tanggal” 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

  1. CodingKeys untuk Penggantian Nama
  2. Strategi Pendekodean Kunci dan Tanggal
  3. encode(to:) dan init(from:) Manual
  4. Mendekodekan JSON Heterogen
← Kembali ke Swift Academy