当前位置: 首页 > article >正文

Swift 中 Codable 和 Hashable 的理解

最近初学Swift,碰到下面的代码脑袋里冒出疑问:Codable 和 Hashable是啥?怎么理解?

struct Landmark: Hashable, Codable {
    var id: Int
    var name: String
    var park: String
    var state: String
    var description: String
}

针对上面的疑问,特意去学习了一下

CodableHashable 是 Swift 中的两个协议,它们有不同的功能和用途:

1. Codable 协议

Codable 是一个合成协议,它包含了 EncodableDecodable 两个协议。简而言之,Codable 让对象能够与外部数据(例如 JSON 或 Plist)进行互相转换。

  • Encodable:使对象能够被编码成数据格式(如 JSON)。它定义了如何将对象的属性转化为可存储的格式。
  • Decodable:使对象能够从某种数据格式(如 JSON)中解码回来。它定义了如何将数据格式转化为对象。

当一个类型符合 Codable 协议时,就可以方便地将其序列化和反序列化,这在处理网络请求和数据存储时特别有用。

例子

struct Landmark: Codable {
    var id: Int
    var name: String
    var park: String
    var state: String
    var description: String
}

如果你有一个 Landmark 对象,并且需要将它转换为 JSON 数据,或者将 JSON 数据转换回 Landmark 对象,Codable 使这变得非常容易。

2. Hashable 协议

Hashable 是一个协议,要求类型必须能够提供一种“哈希值”,这个值可以用来确定对象的唯一性。实现 Hashable 协议的类型可以被用作字典的键或集合(Set)的元素。

为了符合 Hashable 协议,类型需要实现 hash(into:) 方法,这个方法会根据对象的属性计算出一个哈希值。Swift 会根据这个哈希值来判断两个对象是否相等。

例子

struct Landmark: Hashable {
    var id: Int
    var name: String
    var park: String
    var state: String
    var description: String
}

在这个例子中,Landmark 结构体符合 Hashable 协议,Swift 会自动使用 id, name, park, state, 和 description 来生成哈希值,这样我们就可以将 Landmark 对象用于集合(如 Set<Landmark>)或字典的键。

总结:

  • Codable:用于对象与外部数据格式之间的转换(编码和解码)。
  • Hashable:用于对象的哈希值计算,方便进行集合和字典的操作,判断对象的唯一性。

http://www.kler.cn/a/524211.html

相关文章:

  • Baklib揭示内容中台与人工智能技术的创新协同效应
  • 21.2-工程中添加FreeRTOS(掌握) 用STM32CubeMX添加FreeRTOS
  • SQL UCASE() 函数详解
  • 2025春招 SpringCloud 面试题汇总
  • wow-agent---task4 MetaGPT初体验
  • Cursor 帮你写一个小程序
  • < OS 有关> BaiduPCS-Go 程序的 菜单脚本 Script: BaiduPCS-Go.Menu.sh (bdgo.sh)
  • 基于 STM32 的智能工业水质监测与净化系统
  • scrol家族 offset家族 client家族学习
  • js学习笔记(2)
  • 单链表专题(上)
  • 玩转 LangChain:深度评估问答系统的三种高效方法(示例生成、手动评估与LLM辅助评估)
  • 19.Word:小马-校园科技文化节❗【36】
  • QT+mysql+python 效果:
  • 八种排序算法【C语言实现】
  • 代码随想录| 动态规划188.买卖股票的最佳时机IV 309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费
  • 技术发展视域下中西方技术研发思维方式的比较与启示
  • 传奇引擎游戏微端的作用
  • 5分钟带你获取deepseek api并搭建简易问答应用
  • AI工具灵感速递:离线ChatGPT×自然语言全栈开发×智能文件重命名,开发者效率革命!
  • DeepSeek-R1:开源Top推理模型的实现细节、使用与复现
  • 【华为OD-E卷 - 字符串解密 100分(python、java、c++、js、c)】
  • 52. TCP四次挥手
  • 动态规划<九>两个数组的dp
  • 基于SpringBoot电脑组装系统平台系统功能实现六
  • PHP If...Else 语句详解