如何处理将包含 Swift 结构的 Swift 结构编码为 属性
How to Handle Encoding a Swift Struct Containing Swift Struct as Property
我需要保留用户选择的首选 Location
。 Location
包含一些属性:
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
。
我的问题是:因为我想保留一个包含 Address
的 Location
,我是否还需要创建封装类型来编码和解码 Address
,或者当我编码和解码它的其他属性时,只编码和解码 Location
内部的 Address
属性会更合适吗?
我事先不知道 Address
是否会作为可能需要在 UserDefaults
中保留的 属性 应用于其他类型。我倾向于创建一个封装类型来编码和解码 Address
.
看来我应该创建一个封装类型来确保我的 Location
实例的 address
属性 可以被编码和解码。这样我就可以简单地调用 coder.encode(address, forKey: "address")
.
我在更改搜索查询字词后发现了一个有用的 answer。
我需要保留用户选择的首选 Location
。 Location
包含一些属性:
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
。
我的问题是:因为我想保留一个包含 Address
的 Location
,我是否还需要创建封装类型来编码和解码 Address
,或者当我编码和解码它的其他属性时,只编码和解码 Location
内部的 Address
属性会更合适吗?
我事先不知道 Address
是否会作为可能需要在 UserDefaults
中保留的 属性 应用于其他类型。我倾向于创建一个封装类型来编码和解码 Address
.
看来我应该创建一个封装类型来确保我的 Location
实例的 address
属性 可以被编码和解码。这样我就可以简单地调用 coder.encode(address, forKey: "address")
.
我在更改搜索查询字词后发现了一个有用的 answer。