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

如何处理将包含Swift Struct作为属性的Swift Struct编码,struct,encoding,decoding,userdefaults,Struct,Encoding,Decoding,Userdefaults,我需要保留用户选择的首选位置。位置包含几个属性: 公共结构位置{ //标记:-属性 公共let标识符:Int 公共let名称:String 公共广播:地址? //标记:-初始化 公共初始化(标识符:Int,名称:String,地址:address?){ self.identifier=标识符 self.name=名称 self.address=地址 } } 地址如下所示: 公共结构地址{ //标记:-属性 公共租赁城市:字符串? 公共let状态:字符串? 公共let postalCode:字符

我需要保留用户选择的首选
位置。
位置
包含几个属性:

公共结构位置{
//标记:-属性
公共let标识符:Int
公共let名称:String
公共广播:地址?
//标记:-初始化
公共初始化(标识符:Int,名称:String,地址:address?){
self.identifier=标识符
self.name=名称
self.address=地址
}
}
地址如下所示:

公共结构地址{
//标记:-属性
公共租赁城市:字符串?
公共let状态:字符串?
公共let postalCode:字符串?
公共租赁国:字符串?
//标记:-初始化
公共初始化(城市:字符串?,州:字符串?,邮政编码:字符串?,国家:字符串?){
self.city=城市
self.state=状态
self.postalCode=postalCode
self.country=国家
}
}
因为我在任何给定的时间只需要保存一个
位置
,所以我更喜欢使用
UserDefaults

我有一个类型,它封装了一个
位置
,因此可以对其进行编码和解码,以便由
UserDefaults
保存。但是,我还没有为编码和解码
地址
创建封装类型

我的问题是:既然我想持久化一个
位置
,它包含一个
地址
,那么我是否需要创建封装类型来编码和解码
地址
,或者,当我对
位置
中的
地址
属性进行编码和解码时,是否更合适


我事先不知道
Address
是否会作为一个属性应用于其他类型,该属性可能需要在
UserDefaults
中持久化。我倾向于创建一个封装类型来编码和解码
地址

似乎我应该创建一个封装类型,以确保我的
位置
实例的
地址
属性可以被编码和解码。这将允许我简单地调用
coder.encode(address,forKey:“address”)

更改搜索查询条件后,我发现了一个有用的方法