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

Posted

技术标签:

【中文标题】如何处理包含 Swift 结构作为属性的 Swift 结构的编码【英文标题】:How to Handle Encoding a Swift Struct Containing Swift Struct as Property 【发布时间】:2017-05-05 14:19:46 【问题描述】:

我需要保留用户选择的首选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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于如何处理包含 Swift 结构作为属性的 Swift 结构的编码的主要内容,如果未能解决你的问题,请参考以下文章

Swift之深入解析SwiftUI属性包装器如何处理结构体

Swift Alamofire 如何处理来自循环的所有请求

如何处理 API 有时将属性作为数组返回,有时作为对象返回?

如何处理具有相似属性的维度?

如何处理类层次结构

如何处理 NSData 并返回 UIImage (Swift)