如何处理将包含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”)
更改搜索查询条件后,我发现了一个有用的方法