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

时间:2017-05-05 14:19:46

标签: struct encoding decoding userdefaults

我需要保留用户选择的首选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创建封装类型。

我的问题是:由于我想要保留Location,其中包含Address,我是否需要创建封装类型以对Address进行编码和解码,或者在编码和解码其他属性时,对Address内的Location属性进行编码和解码会更合适吗?

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

1 个答案:

答案 0 :(得分:0)

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

我在更改搜索查询字词后找到了有用的answer