swift标准库为我们提供了大量的协议,使用这些协议可以让我们的程序更加高效。同时我们也可以从Apple官方实现的协议中学习,从而写出更好的swift程序以及按照自己的需求自定义一个协议。(更多可了解面向协议编程)
常用的几个协议
Hashable : 可哈希化
-
Hashable
继承于Equatable
协议 - 在标准库中,大部分基本类型都是遵循
Hashable
协议的,如Int、String等 - 使用
Dictionary
或Set
等数据结构时,要求作为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