এনকোড / ডিকোড করার কীগুলির তালিকাটি টাইপ করে CodingKeys
( s
শেষের দিকে নোট করুন ) দ্বারা নিয়ন্ত্রণ করা হয় । সংকলকটি আপনার জন্য এটি সংশ্লেষিত করতে পারে তবে সর্বদা এটি ওভাররাইড করতে পারে।
ধরা যাক আপনি nickname
এনকোডিং এবং ডিকোডিং উভয় থেকে সম্পত্তি বাদ দিতে চান :
struct Person: Codable {
var firstName: String
var lastName: String
var nickname: String?
private enum CodingKeys: String, CodingKey {
case firstName, lastName
}
}
আপনি যদি এটি অসম্পূর্ণ হতে চান (যেমন এনকোড তবে ডিকোড বা তদ্বিপরীত নয়), আপনার নিজের প্রয়োগগুলি সরবরাহ করতে হবে encode(with encoder: )
এবং 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)
}
}
CodingKeys
এনামের বাইরে রেখে দেওয়া যথেষ্ট।