Swift 泛型-Where 语句

简介: Swift 泛型-Where 语句

类型约束能够确保类型符合泛型函数或类的定义约束。

你可以在参数列表中通过where语句定义参数的约束。

你可以写一个where语句,紧跟在在类型参数列表后面,where语句后跟一个或者多个针对关联类型的约束,以及(或)一个或多个类型和关联类型间的等价(equality)关系。

实例

下面的例子定义了一个名为allItemsMatch的泛型函数,用来检查两个Container实例是否包含相同顺序的相同元素。

如果所有的元素能够匹配,那么返回 true,反之则返回 false。

泛型

// Container 协议protocol Container {    associatedtype ItemType    // 添加一个新元素到容器里    mutating func append(_ item: ItemType)    // 获取容器中元素的数    var count: Int { get }    // 通过索引值类型为 Int 的下标检索到容器中的每一个元素    subscript(i: Int) -> ItemType { get }} // // 遵循Container协议的泛型TOS类型struct Stack<Element>: Container {    // Stack<Element> 的原始实现部分    var items = [Element]()    mutating func push(_ item: Element) {        items.append(item)    }    mutating func pop() -> Element {        return items.removeLast()    }    // Container 协议的实现部分    mutating func append(_ item: Element) {        self.push(item)    }    var count: Int {        return items.count    }    subscript(i: Int) -> Element {        return items[i]    }}// 扩展,将 Array 当作 Container 来使用extension Array: Container {} func allItemsMatch<C1: Container, C2: Container>     (_ someContainer: C1, _ anotherContainer: C2) -> Bool    where C1.ItemType == C2.ItemType, C1.ItemType: Equatable {                 // 检查两个容器含有相同数量的元素        if someContainer.count != anotherContainer.count {            return false        }                 // 检查每一对元素是否相等        for i in 0..<someContainer.count {            if someContainer[i] != anotherContainer[i] {                return false            }        }                 // 所有元素都匹配,返回 true        return true}var tos = Stack<String>()tos.push("google")tos.push("runoob")tos.push("taobao") var aos = ["google", "runoob", "taobao"] if allItemsMatch(tos, aos) {    print("匹配所有元素")} else {    print("元素不匹配")}

以上程序执行输出结果为:

匹配所有元素

目录
相关文章
|
7月前
|
存储 安全 Swift
Swift 语言:什么是 Swift 的泛型(Generics)?
Swift 语言:什么是 Swift 的泛型(Generics)?
89 0
|
26天前
|
安全 开发工具 Swift
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发。基础语法涵盖变量、常量、数据类型、运算符、控制流等,高级特性包括函数、闭包、类、结构体、协议和泛型。
25 2
|
1月前
|
Swift 索引 容器
Swift 泛型-关联类
Swift 泛型-关联类
22 1
|
1月前
|
Swift 索引 容器
Swift 泛型-扩展泛型类型
Swift 泛型-扩展泛型类型
25 2
|
1月前
|
存储 Swift
Swift 泛型
Swift 泛型
33 2
|
1月前
|
Swift 索引
Swift 泛型-类型约束
Swift 泛型-类型约束
25 1
|
5月前
|
存储 安全 Swift
Swift高级特性:泛型与协议
【7月更文挑战第10天】Swift高级特性:泛型与协议增强代码复用与类型安全。泛型允许编写通用代码,如`swap`函数和泛型`Stack`结构体,支持类型约束如`Comparable`。协议定义行为蓝图,类型遵循协议需实现其要求。通过两者结合,构建高效灵活的代码结构。
|
7月前
|
安全 算法 Swift
【Swift开发专栏】Swift中的泛型编程
【4月更文挑战第30天】Swift的泛型允许开发人员创建可重用的组件,操作多种数据类型,无需针对每种类型编写特定代码。本文分为三部分:1) 泛型基本概念,包括类型参数、泛型函数和类型;2) Swift中的泛型实现,如类型推断、关联类型和泛型约束;3) 泛型编程最佳实践,如明确使用场景、选择有意义的类型参数名称和避免过度泛化。通过理解并应用这些概念,开发者能编写出更灵活、安全和高效的代码。
65 2
|
Swift C++ 索引
33 Swift泛型的发展历史与泛型的概述
Swift泛型的发展历史与泛型的概述
66 0
|
Swift
Swift实用小册21: Generics泛型的使用
在本章中,你将学会Generics泛型的使用方法。
181 0
Swift实用小册21: Generics泛型的使用