在Swift中扩展自定义对象 - 扩展

问题描述 投票:4回答:1

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

class Customer: NSCopying, NSObject {

    var name: String!
    var age: Int!
    var address: Address!
}

那时我没有控制权来修改模型的任何属性和签名作为其内部SDK。但是我需要将对象存储在磁盘/用户默认值中并在需要时加载。

可能吗?如果是的话我该怎么做?

ios swift nscoding user-preferences nsarchiving
1个回答
1
投票

一种方法是使用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")!))
© www.soinside.com 2019 - 2024. All rights reserved.