Anahtar ve Tarih Kod Çözme Stratejileri
snake_case ve tarih stratejilerini kullanın.
Anahtar ve Tarih Kod Çözme Stratejileri, CoddyKit'te ücretsiz bir Swift Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Swift Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Swift Academy kursu toplamda 4 dersten oluşur.
Kod Çözme Stratejilerine Genel Bakış
Her tür için bir CodingKeys numaralandırması yazmak yerine, kod çözücü üzerinde genel bir strateji ayarlayabilirsiniz. Stratejiler, kodu çözülen tüm türlerde anahtarları dönüştürür ve tarihleri tek biçimli olarak ayrıştırır.
import Foundation
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
print("Strategy configured")convertFromSnakeCase
keyDecodingStrategy = .convertFromSnakeCase ayarı, first_name gibi anahtarları firstName camelCase özelliğine otomatik olarak eşler — CodingKeys gerekmez.
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)Alt Çizgi Biçimine Kodlama
Kodlayıcıda bunun karşılığı olan seçenek de vardır: keyEncodingStrategy = .convertToSnakeCase, camelCase özelliklerini alt çizgi biçimindeki JSON anahtarları olarak yazar.
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)!)Strateji Tüm Anahtarlara Uygulanır
Bir anahtar stratejisi, iç içe geçmiş her türün her özelliğine aynı şekilde uygulanır. Bu, tüm API alt çizgi biçimini tutarlı olarak kullanıyorsa idealdir.
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)Tarih Sorunu
JSON'da tarih türü yoktur. Date değerleri sayılar veya dizeler olarak kodlanır ve kod çözücünün biçimi bilmesi gerekir. dateDecodingStrategy ona nasıl işlem yapacağını bildirir.
import Foundation
struct Event: Codable {
var name: String
var date: Date
}
print("Date needs a strategy to parse")ISO-8601 Tarih Kod Çözme
dateDecodingStrategy = .iso8601, 2020-01-01T00:00:00Z gibi standart ISO-8601 zaman damgalarını Date değerlerine ayrıştırır.
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)ISO-8601 Tarih Kodlama
Kodlayıcıdaki karşılığı dateEncodingStrategy = .iso8601 ayarıdır; bu ayar Date değerlerini ISO-8601 dizeleri olarak yazar.
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)!)secondsSince1970 Stratejisi
Bir API Unix zaman damgalarını sayı olarak gönderdiğinde, bunları çağdan bu yana geçen saniyeler olarak yorumlamak için .secondsSince1970 kullanın.
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)Özel Tarih Biçimleri
Standart olmayan biçimler için .formatted(_:) aracılığıyla bir DateFormatter sağlayın. Bu, 2020-01-01 gibi saat bileşeni olmayan tarihleri işler.
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)Stratejileri Birleştirme
Anahtar ve tarih stratejileri aynı kod çözücü üzerinde birlikte ayarlanabilir; böylece alt çizgi biçimini ve ISO-8601'i kullanan bir API'yi tür başına ek kod yazmadan işleyebilirsiniz.
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)Strateji ve CodingKeys Karşılaştırması
Genel strateji, tutarlı API'ler için kısa ve özdür. Yalnızca birkaç anahtar farklı olduğunda veya adlar düzensiz olduğunda, açık bir CodingKeys numaralandırması her anahtar üzerinde kesin denetim sağlar. İkisi birlikte de kullanılabilir.
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)Hızlı Kontrol: Stratejiler
Kod çözme stratejileri konusundaki anlayışınızı sınayın.
Özet: Anahtar ve Tarih Stratejileri
Genel kodlayıcı yapılandırmasını öğrendiniz:
keyDecodingStrategy = .convertFromSnakeCase, alt çizgi biçimindeki adları camelCase biçimine eşler;.convertToSnakeCaseise ters yönde kodlar.dateDecodingStrategy = .iso8601, ISO zaman damgalarını ayrıştırır;.secondsSince1970ve.formatted(_:)diğer biçimleri kapsar.- Stratejiler, iç içe geçmiş her türe aynı şekilde uygulanır.
- Tutarlı API'ler için stratejileri, düzensiz API'ler için
CodingKeyskullanın.
Sıkça Sorulan Sorular
“Anahtar ve Tarih Kod Çözme Stratejileri” dersi ücretsiz mi?
Evet — “Anahtar ve Tarih Kod Çözme Stratejileri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Swift Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Swift Academy kursu toplamda 4 dersten oluşur.
“Anahtar ve Tarih Kod Çözme Stratejileri” dersinde ne öğreneceğim?
snake_case ve tarih stratejilerini kullanın. Swift Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Swift Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Swift Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Anahtar ve Tarih Kod Çözme Stratejileri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Swift Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Swift Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Yeniden Adlandırma için CodingKeys
- Anahtar ve Tarih Kod Çözme Stratejileri
- Elle encode(to:) ve init(from:)
- Heterojen JSON Kodunu Çözme