美文网首页
swift中的Hashable、Codable、Equatabl

swift中的Hashable、Codable、Equatabl

作者: tino又想吃肉了 | 来源:发表于2021-03-14 16:56 被阅读0次

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

相关文章

网友评论

      本文标题:swift中的Hashable、Codable、Equatabl

      本文链接:https://www.haomeiwen.com/subject/ljaqcltx.html