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

Swift 中 Codable 和 Hashable 的理解

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

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

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

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

1. Codable 协议

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

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

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

例子

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

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

2. Hashable 协议

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

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

例子

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

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

总结:

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

相关文章:

  • 基于 WPF 平台实现成语游戏
  • 2024“博客之星”——我的博客成长与技术洞察
  • HTTPS协议简述
  • 前沿技术趋势洞察:2024年技术的崭新篇章与未来走向!
  • HTML常用属性
  • 电子应用设计方案100:智能家庭AI电风扇系统设计
  • ThinkPHP 8请求处理-获取请求对象与请求上下文
  • 工厂模式 - 工厂方法模式、抽象工厂模式
  • 2025年已过6%
  • C#,入门教程(04)——Visual Studio 2022 数据编程实例:随机数与组合
  • UWB高精度定位技术在智能仓储中的应用
  • 计算机毕业设计hadoop+spark视频推荐系统 短视频推荐系统 视频流量预测系统 短视频爬虫 视频数据分析 视频可视化 视频大数据 大数据
  • 【AI编辑器】字节跳动推出AI IDE——Trae,专为中文开发者深度定制
  • CSDN 博客之星 2024:默语的技术进阶与社区耕耘之旅
  • 《探秘鸿蒙Next:非结构化数据处理与模型轻量化的完美适配》
  • async++库的使用示例
  • springboot基于微信小程序的手机银行系统
  • 25/1/22 算法笔记<ROS2> TF变换
  • Android系统开发(六):从Linux到Android:模块化开发,GKI内核的硬核科普
  • dp 凸优化
  • 详细介绍:Kubernetes(K8s)的技术架构(核心概念、调度和资源管理、安全性、持续集成与持续部署、网络和服务发现)
  • [SAP ABAP] Dialog屏幕开发
  • 安全测试之 SSTI 模板注入入门
  • 滑动窗口解题模板
  • SOC和SOH的含义
  • Genetic Prompt Search via Exploiting Language Model Probabilities
  • 1561. 你可以获得的最大硬币数目
  • DNA结合之Motif_1:CNN
  • kong 网关和spring cloud gateway网关性能测试对比
  • 【2024 CSDN博客之星】个人收获分享