如何在 UserDefaults 中存储自定义对象?
Posted
技术标签:
【中文标题】如何在 UserDefaults 中存储自定义对象?【英文标题】:How can I store a custom object in UserDefaults? 【发布时间】:2021-08-18 17:59:03 【问题描述】:我有一个名为 Note 的结构,它具有一些基本属性,例如 id, title, body
。但我也有一个location
类型的CLLocationCoordinate2D
属性。我想用 UserDefaults 提供本地存储。因为CLLocationCoordinate2D
不符合 Codable 协议,所以我使用了 Xcode 的自动帮助,它创建了一个带有两个协议存根的扩展。看起来是这样的:
extension CLLocationCoordinate2D: Codable
public init(from decoder: Decoder) throws
<#code#>
public func encode(to encoder: Encoder) throws
<#code#>
struct Note: Codable
let id: UUID
let title: String
let body: String
var location: CLLocationCoordinate2D
这就是我需要帮助的地方。因为我不知道如何填补标有<#code#>
的空白。也许有人可以给出提示。非常感谢任何帮助。
【问题讨论】:
【参考方案1】:经过一番研究,我在这里找到了解决方案developer.apple.com/
extension CLLocationCoordinate2D: Codable
enum CodingKeys: String, CodingKey
case latitude
case longitude
public init(from decoder: Decoder) throws
self.init()
let values = try decoder.container(keyedBy: CodingKeys.self)
latitude = try values.decode(Double.self, forKey: .latitude)
longitude = try values.decode(Double.self, forKey: .longitude)
public func encode(to encoder: Encoder) throws
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(latitude, forKey: .latitude)
try container.encode(longitude, forKey: .longitude)
【讨论】:
以上是关于如何在 UserDefaults 中存储自定义对象?的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 NSKeyedArchiver 在 UserDefaults 中保存自定义对象
将自定义对象存储到 NSMutableArray,然后将此 NSMutableArray 存储到 NSUserDefaults