let decoder = PropertyListDecoder()
if let userFromPlist = try? decoder.decode(User.self, from: plistData) {
print(userFromPlist)
}
struct User: Codable {
var name: String
var age: Int
var email: String
enum CodingKeys: String, CodingKey {
case name
case age
case email = "user_email" // 将 "email" 映射到 "user_email"
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(name, forKey: .name)
try container.encode(age, forKey: .age)
try container.encode(email, forKey: .email)
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
name = try container.decode(String.self, forKey: .name)
age = try container.decode(Int.self, forKey: .age)
email = try container.decode(String.self, forKey: .email)
}
}
class Person: NSObject, NSCoding {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
required init?(coder aDecoder: NSCoder) {
name = aDecoder.decodeObject(forKey: "name") as! String
age = aDecoder.decodeInteger(forKey: "age")
}
func encode(with aCoder: NSCoder) {
aCoder.encode(name, forKey: "name")
aCoder.encode(age, forKey: "age")
}
}
struct Address: Codable {
var street: String
var city: String
}
struct User: Codable {
var name: String
var age: Int
var address: Address
}
let address = Address(street: "123 Main St", city: "New York")
let user = User(name: "Alice", age: 25, address: address)
let encoder = JSONEncoder()
if let jsonData = try? encoder.encode(user),
let jsonString = String(data: jsonData, encoding: .utf8) {
print(jsonString)
}
do {
let jsonData = try encoder.encode(user)
} catch {
print("Failed to encode user: \(error.localizedDescription)")
}