如何处理将包含 Swift 结构的 Swift 结构编码为 属性

How to Handle Encoding a Swift Struct Containing Swift Struct as Property

我需要保留用户选择的首选 LocationLocation 包含一些属性:

public struct Location {

    // MARK: - Properties

    public let identifier: Int

    public let name: String

    public let address: Address?

    // MARK: - Initializations

    public init(identifier: Int, name: String, address: Address?) {
        self.identifier = identifier
        self.name = name
        self.address = address
    }

}

Address如下:

public struct Address {

    // MARK: - Properties

    public let city: String?

    public let state: String?

    public let postalCode: String?

    public let country: String?

    // MARK: - Initialization

    public init(city: String?, state: String?, postalCode: String?, country: String?) {
        self.city = city
        self.state = state
        self.postalCode = postalCode
        self.country = country
    }

}

因为我只需要在任何给定时间坚持一个Location,所以我更喜欢使用UserDefaults

我有一个封装了 Location 的类型,这样它就可以被编码和解码,以便被 UserDefaults 持久化。但是,我没有创建用于编码和解码的封装类型Address

我的问题是:因为我想保留一个包含 AddressLocation,我是否还需要创建封装类型来编码和解码 Address ,或者当我编码和解码它的其他属性时,只编码和解码 Location 内部的 Address 属性会更合适吗?

我事先不知道 Address 是否会作为可能需要在 UserDefaults 中保留的 属性 应用于其他类型。我倾向于创建一个封装类型来编码和解码 Address.

看来我应该创建一个封装类型来确保我的 Location 实例的 address 属性 可以被编码和解码。这样我就可以简单地调用 coder.encode(address, forKey: "address").

我在更改搜索查询字词后发现了一个有用的 answer