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










网友评论