Ios 在Swift中存档自定义对象-扩展

Ios 在Swift中存档自定义对象-扩展,ios,swift,nscoding,user-preferences,nsarchiving,Ios,Swift,Nscoding,User Preferences,Nsarchiving,我正在Swift 4.0上开发iOS应用程序。该应用程序使用第三方SDK,其中有一个模型 class Customer: NSCopying, NSObject { var name: String! var age: Int! var address: Address! } 在这一点上,我无法控制修改作为其内部SDK的模型的任何属性和签名。但我需要将对象存储在磁盘/用户默认值中,并在需要时加载 可能吗?如果是,我该如何做呢?一种方法是使用将模型对象转换为JSON数据

我正在Swift 4.0上开发iOS应用程序。该应用程序使用第三方SDK,其中有一个模型

class Customer: NSCopying, NSObject {

    var name: String!
    var age: Int!
    var address: Address!
}
在这一点上,我无法控制修改作为其内部SDK的模型的任何属性和签名。但我需要将对象存储在磁盘/用户默认值中,并在需要时加载

可能吗?如果是,我该如何做呢?

一种方法是使用将模型对象转换为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")!))

向客户添加扩展并确认可Coadable协议,这会不会有帮助?让我知道,如果我没有正确理解你的问题,你就不能遵守扩展中的Codable。您不能添加初始值设定项@sandeppebhandariyes我不能像Sweeper提到的那样添加初始值设定项@SandeepBhandari@sazzad-希赛因·汗:我在考虑去游泳,谢谢你的时间。还有别的办法吗?我使用的模型由许多其他模型组成,深度也超过2/3,如果我需要扩展所有其他模型,这将是一项乏味的任务:(无论您使用哪种方式,我怀疑您必须手动处理所有类。您不必为每个类都编写扩展。我的意思是,您可以在
Customer.toJSON
中将
Address
转换为JSON,而无需创建新的
Address
扩展。另一种方法是创建其模型类的
Codable
包装s