33 Swift泛型的发展历史与泛型的概述

简介: Swift泛型的发展历史与泛型的概述

泛型的发展历史以及泛型的概述

image.png

C++ 泛型

image.png

  • 面对对象库
  • MFC
  • 模板库
  • STL
  • Boost

template vs generic

  • 模板是C++泛型编程的基础
  • 泛型更来指一种编程思想

为什么需要泛型

  • 下面swapTwoInts(_: _:)是一个标准的非泛型函数,用于交换两个Int值

image.png

  • 如果你想交换两个String值,或者两个Double值,你只能再写更多的函数,比如下面的swapTwoStrings(_: _:)和swapTwoDoubles(_: _:)函数

image.png

  • swapTwoInts(_: _:)、swapTwoStrings(_: _:)和swapTwoDoubles(_: _:)函数体是一样的。唯一的区别是它们接受值类型不同(Int、String和Double)


如何在Swift中定义泛型函数

泛型函数定义

  • 泛型函数可以用于任何类型。这里是上面提到的swapTwoInts(_: _:)函数的泛型版本,叫做swapTwoValue(_: _:)

image.png

类型形式参数

image.png

命名类型形式参数

image.png

如何在Swift中定义泛型类型

泛型类型

  • 除了泛型函数,Swift允许你定义自己的泛型类型。它们是可以用于任意类型的自定义类、结构体、枚举,和Array、Dictionary方式类型

image.png

image.png

泛型Stack

image.png

image.png

image.png

扩展泛型类型

  • 当你扩展一个泛型类型时,不需要在扩展的定义中提供类型形式参数列表。原始类型定义的类型形式参数列表在扩展体里仍然有效,并且原始类型形式参数列表名称也用于扩展类型形式参数

image.png

Swift泛型中的类型约束

类型约束

image.png

类型约束语法

  • 在一个类型形式参数名称后面放置一个类或者协议作为形式参数列表的一部分,并用冒号隔开,以写出一个类型的约束。下面展示了一个泛型函数类型约束的基本语法(和泛型类型的语法相同)

image.png

类型约束的应用

  • 这是一个叫做findIndex(ofString:in:)的非泛型函数,在给定的String值数组中查找给定的String值。findIndex(ofString:in:)函数返回一个可选的Int值,如果找到了给定字符串,它会返回数组中第一个匹配的字符串的索引值,如果找不到给定字符串就返回nil

image.png

这里写出了一个叫做findIndex(of:in:)的函数,可能是你期望的findIndex(ofString:in:)函数的一个泛型版本。注意,函数的返回值仍然是Int?, 因为函数返回一个可选的索引数字,而不是数组里的一个可选的值。这个函数没有编译

image.png

  • Swift标准库中定义了一个叫做Equatable的协议,要求遵循其协议的类型要实现相等操作符(==)和不等操作符(!=),用于比较该类型的任意两个值。所有Swift标准库中的类型自动支持Equatable协议
  • 任何Equatable的类型都能安全地用于findIndex(of:in:)函数,因为可以保证那些类型支持相等操作符。为了表达这个事实,当你定义函数时将Equatable类型约束作为类型形式参数定义的一部分书写

image.png

















目录
相关文章
|
6月前
|
存储 安全 Swift
Swift 语言:什么是 Swift 的泛型(Generics)?
Swift 语言:什么是 Swift 的泛型(Generics)?
86 0
|
6天前
|
Swift 索引 容器
Swift 泛型-Where 语句
Swift 泛型-Where 语句
13 2
|
6天前
|
Swift 索引 容器
Swift 泛型-关联类
Swift 泛型-关联类
13 1
|
7天前
|
Swift 索引 容器
Swift 泛型-扩展泛型类型
Swift 泛型-扩展泛型类型
16 2
|
7天前
|
存储 Swift
Swift 泛型
Swift 泛型
15 2
|
7天前
|
Swift 索引
Swift 泛型-类型约束
Swift 泛型-类型约束
17 1
|
4月前
|
存储 安全 Swift
Swift高级特性:泛型与协议
【7月更文挑战第10天】Swift高级特性:泛型与协议增强代码复用与类型安全。泛型允许编写通用代码,如`swap`函数和泛型`Stack`结构体,支持类型约束如`Comparable`。协议定义行为蓝图,类型遵循协议需实现其要求。通过两者结合,构建高效灵活的代码结构。
|
6月前
|
安全 算法 Swift
【Swift开发专栏】Swift中的泛型编程
【4月更文挑战第30天】Swift的泛型允许开发人员创建可重用的组件,操作多种数据类型,无需针对每种类型编写特定代码。本文分为三部分:1) 泛型基本概念,包括类型参数、泛型函数和类型;2) Swift中的泛型实现,如类型推断、关联类型和泛型约束;3) 泛型编程最佳实践,如明确使用场景、选择有意义的类型参数名称和避免过度泛化。通过理解并应用这些概念,开发者能编写出更灵活、安全和高效的代码。
58 2
|
存储 编译器 Swift
27 Swift面向对象概述
Swift面向对象概述
55 0
|
Swift
Swift实用小册21: Generics泛型的使用
在本章中,你将学会Generics泛型的使用方法。
177 0
Swift实用小册21: Generics泛型的使用