swift中的Hashable、Codable、Equatable

swift标准库为我们提供了大量的协议,使用这些协议可以让我们的程序更加高效。同时我们也可以从Apple官方实现的协议中学习,从而写出更好的swift程序以及按照自己的需求自定义一个协议。(更多可了解面向协议编程

常用的几个协议

Hashable : 可哈希化

  • Hashable继承于Equatable协议
  • 在标准库中,大部分基本类型都是遵循Hashable协议的,如Int、String等
  • 使用DictionarySet等数据结构时,要求作为Key的类型要实现Hashable协议
  • 在swift4.2之后,如果一个struct中包含的数据类型是基本类型,那么在使它遵循Hashable时编译器会自动为它生成一组==hash(into:)函数。
  •   //如果想自己实现hash函数,大多数情况下这样就可以
      func hash(into hasher: inout Hasher) {
          hasher.combine(xxx)
          hasher.combine(xxx)
      }
    

Codable : 可以转解码

  • Codable 实际上是由Encodable & Decodable 组成
  • 遵循Codable协议的对象会自动实现Encodable & Decodable
  • Decodable协议定义了一个初始化函数:init(from decoder: Decoder) throws
  • Encodable协议定义了一个方法:func encode(to encoder: Encoder) throws
  • 使用遵循Codinkey协议的一个enum可以自定义要解析的键值名
  • Codable的主要使用场景是将JSON数据解析为模型数据,需要将要解析的内容设置成可选型,否则如果JSON中某数据为空的话将会解析失败。
  • 解析数据时只需要使用一个JSONDecoder实例,调用它的decode的方法就可以实现解析。如let student = try JSONDecoder().decode(Student.self,from: json)

Equatable : 可比较

  • 基本数据类型默认实现了Equatable
  • 要让自定义类型实现Equatable的话,可以使用extension,在extension中遵循Equatable协议,并且实现需要的例如==等方法
  • Comparable协议类似

TINO WU

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容