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
}
针对上面的疑问,特意去学习了一下
Codable
和 Hashable
是 Swift 中的两个协议,它们有不同的功能和用途:
1. Codable
协议
Codable
是一个合成协议,它包含了 Encodable
和 Decodable
两个协议。简而言之,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
:用于对象的哈希值计算,方便进行集合和字典的操作,判断对象的唯一性。
原文地址:https://blog.csdn.net/qq_45797625/article/details/145310209
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!