Kodlama / kod çözme anahtarlarının listesi, adı verilen bir tür tarafından kontrol edilir CodingKeys( ssonuna dikkat edin ). Derleyici bunu sizin için sentezleyebilir, ancak bunu her zaman geçersiz kılabilir.
Diyelim ki mülkü hariç tutmak istediğiniz diyelim nicknamekodlama hem ve şifre çözme:
struct Person: Codable {
var firstName: String
var lastName: String
var nickname: String?
private enum CodingKeys: String, CodingKey {
case firstName, lastName
}
}
Asimetrik olmasını istiyorsanız (yani kodlayıp çözmemesini veya tam tersi), kendi uygulamalarınızı sağlamalısınız encode(with encoder: )ve init(from decoder: ):
struct Person: Codable {
var firstName: String
var lastName: String
var fullName: String {
return firstName + " " + lastName
}
private enum CodingKeys: String, CodingKey {
case firstName
case lastName
case fullName
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
firstName = try container.decode(String.self, forKey: .firstName)
lastName = try container.decode(String.self, forKey: .lastName)
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(firstName, forKey: .firstName)
try container.encode(lastName, forKey: .lastName)
try container.encode(fullName, forKey: .fullName)
}
}
CodingKeysnumaralandırmanın dışında bırakmak yeterli olacaktır.