Swift5.1—标准库中的常用协议

简介: Swift5.1—标准库中的常用协议

在扩展协议的时候,可以指定一些限制条件,只有遵循协议的类型满足这些限制条件时,才能获得协议扩展提供的默认实现。这些限制条件写在协议名之后,使用 where 子句来描述,正如 泛型 Where 子句 中所描述的。


例如,你可以扩展 Collection 协议,适用于集合中的元素遵循了 Equatable 协议的情况。通过限制集合元素遵循 Equatable 协议, 作为标准库的一部分, 你可以使用 ==!= 操作符来检查两个元素的等价性和非等价性。

extension Collection where Element: Equatable {
    func allEqual() -> Bool {
        for element in self {
            if element != self.first {
                return false
            }
        }
        return true
    }
}


如果集合中的所有元素都一致,allEqual() 方法才返回 true

看看两个整数数组,一个数组的所有元素都是一样的,另一个不一样:

let equalNumbers = [100, 100, 100, 100, 100]
let differentNumbers = [100, 100, 200, 100, 200]


由于数组遵循 Collection 而且整数遵循 EquatableequalNumbersdifferentNumbers 都可以使用 allEqual() 方法。

print(equalNumbers.allEqual())
// 打印 "true"
print(differentNumbers.allEqual())
// 打印 "false"


注意

如果一个遵循的类型满足了为同一方法或属性提供实现的多个限制型扩展的要求, Swift 会使用最匹配限制的实现。


注:


1.类型定义完成之后,紧接运算符重载,协议也是

2.equatable( ==)comparable(<):重载后可直接通过协议判断不等

3.customStringConvertible 自定义print打印类型

4.extension的内容,不能写存储型变量(swift语法规则)

目录
相关文章
|
3月前
|
Swift iOS开发
Swift 语言: 什么是协议(Protocol)?如何实现和使用协议?
Swift 语言: 什么是协议(Protocol)?如何实现和使用协议?
41 2
|
6月前
|
算法 Swift C++
34 Swift为了协议 关联类型
Swift为了协议 关联类型
39 0
|
6月前
|
存储 Swift iOS开发
31 Swift 继续聊聊协议扩展
Swift 继续聊聊协议扩展
49 0
|
6月前
|
Swift C++ Ruby
32 Swift面向协议编程初探
32 Swift面向协议编程初探
37 0
|
存储 前端开发 Swift
Swift实用小册20: Protocol协议的使用
在本章中,你将学会Protocol协议的使用方法。
219 0
Swift实用小册20: Protocol协议的使用
|
Swift C++ 开发者
Swift5.0 - day12 - 面向协议编程
Swift5.0 - day12 - 面向协议编程
279 0
|
文件存储 Swift
Swift5.0 - day9-字面量协议、模式匹配
Swift5.0 - day9-字面量协议、模式匹配
108 0
|
存储 Swift
Swift5.0 - day5-继承、初始化、可选链、协议(下)
Swift5.0 - day5-继承、初始化、可选链、协议(下)
78 0
|
存储 安全 Java
Swift5.0 - day5-继承、初始化、可选链、协议(上)
Swift5.0 - day5-继承、初始化、可选链、协议(上)
101 0
Swift5.0 - day5-继承、初始化、可选链、协议(上)
|
存储
Swift5.1—检查协议一致性
Swift5.1—检查协议一致性
236 0

相关课程

更多