如何在 UserDefaults 中存储自定义对象?

How can I store a custom object in UserDefaults?

我有一个名为 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#>的空白。也许有人可以给个提示。非常感谢任何帮助。

经过一些研究,我在这里找到了解决方案 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)
  }
}