在 Swift 中归档自定义对象 - 扩展
Archiving Custom Object in Swift - Extended
我正在 Swift 4.0 上开发 iOS 应用程序。该应用程序使用第 3 方 SDK,其中有一个模型可以说,
class Customer: NSCopying, NSObject {
var name: String!
var age: Int!
var address: Address!
}
那时我无法控制修改模型的任何属性和签名作为其内部 SDK。但我需要将对象存储在 disk/user 默认值中并在需要时加载。
可能吗?如果是,我该怎么做?
一种方法是使用SwiftyJSON将模型对象转换为JSON数据:
extension Customer {
func toJSON() -> JSON {
return [
"name": name
"age": age
"address": address.toJSON() // add a toJSON method the same way in an Address extension
]
}
static func fromJSON(_ json: JSON) -> Customer {
let customer = Customer()
customer.name = json["name"].string
customer.age = json["age"].int
customer.address = Address.fromJSON(json["address"]) // add a fromJSON method the same way
}
}
现在您可以执行一些操作,例如保存到 UserDefaults
UserDefaults.standard.set(try! Customer().toJSON().rawData(), forKey: "my key")
let customer = Customer.fromJSON(JSON(data: UserDefaults.standard.data(forKey: "my key")!))
我正在 Swift 4.0 上开发 iOS 应用程序。该应用程序使用第 3 方 SDK,其中有一个模型可以说,
class Customer: NSCopying, NSObject {
var name: String!
var age: Int!
var address: Address!
}
那时我无法控制修改模型的任何属性和签名作为其内部 SDK。但我需要将对象存储在 disk/user 默认值中并在需要时加载。
可能吗?如果是,我该怎么做?
一种方法是使用SwiftyJSON将模型对象转换为JSON数据:
extension Customer {
func toJSON() -> JSON {
return [
"name": name
"age": age
"address": address.toJSON() // add a toJSON method the same way in an Address extension
]
}
static func fromJSON(_ json: JSON) -> Customer {
let customer = Customer()
customer.name = json["name"].string
customer.age = json["age"].int
customer.address = Address.fromJSON(json["address"]) // add a fromJSON method the same way
}
}
现在您可以执行一些操作,例如保存到 UserDefaults
UserDefaults.standard.set(try! Customer().toJSON().rawData(), forKey: "my key")
let customer = Customer.fromJSON(JSON(data: UserDefaults.standard.data(forKey: "my key")!))