美文网首页
33 Swift泛型的发展历史与泛型的概述

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

作者: 为了自由的白菜 | 来源:发表于2023-03-21 11:45 被阅读0次

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

image-20230306214509573.png

C++ 泛型

image-20230306214748469.png
  • 面对对象库
    • MFC
  • 模板库
    • STL
    • Boost

template vs generic

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

为什么需要泛型

  • 下面swapTwoInts(_: _:)是一个标准的非泛型函数,用于交换两个Int值
image-20230306215158686.png
  • 如果你想交换两个String值,或者两个Double值,你只能再写更多的函数,比如下面的swapTwoStrings(_: _:)和swapTwoDoubles(_: _:)函数
image-20230306215417542.png
  • swapTwoInts(_: _:)、swapTwoStrings(_: _:)和swapTwoDoubles(_: _:)函数体是一样的。唯一的区别是它们接受值类型不同(Int、String和Double)

如何在Swift中定义泛型函数

泛型函数定义

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

类型形式参数

image-20230306215856105.png

命名类型形式参数

image-20230306220039399.png

如何在Swift中定义泛型类型

泛型类型

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

泛型Stack

image-20230306220443127.png image-20230306220601009.png image-20230306220626365.png

扩展泛型类型

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

Swift泛型中的类型约束

类型约束

image-20230306221205120.png

类型约束语法

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

类型约束的应用

  • 这是一个叫做findIndex(ofString:in:)的非泛型函数,在给定的String值数组中查找给定的String值。findIndex(ofString:in:)函数返回一个可选的Int值,如果找到了给定字符串,它会返回数组中第一个匹配的字符串的索引值,如果找不到给定字符串就返回nil
image-20230306221717101.png
  • 这里写出了一个叫做findIndex(of:in:)的函数,可能是你期望的findIndex(ofString:in:)函数的一个泛型版本。注意,函数的返回值仍然是Int?, 因为函数返回一个可选的索引数字,而不是数组里的一个可选的值。这个函数没有编译
image-20230306221954662.png
  • Swift标准库中定义了一个叫做Equatable的协议,要求遵循其协议的类型要实现相等操作符(==)和不等操作符(!=),用于比较该类型的任意两个值。所有Swift标准库中的类型自动支持Equatable协议
  • 任何Equatable的类型都能安全地用于findIndex(of:in:)函数,因为可以保证那些类型支持相等操作符。为了表达这个事实,当你定义函数时将Equatable类型约束作为类型形式参数定义的一部分书写
image-20230306222346973.png

相关文章

  • [ WWDC2018 ] - Swift 泛型 Swift Ge

    Swift 泛型历史 我们首先来回顾一下 Swift 中对于泛型支持的历史变更,看看现在在 Swift 中,泛型都...

  • 泛型 & 注解 & Log4J日志组件

    掌握的知识 : 基本用法、泛型擦除、泛型类/泛型方法/泛型接口、泛型关键字、反射泛型(案例) 泛型 概述 : 泛型...

  • 8.泛型

    泛型历史和概述 泛型发展 泛型程序最早出现1970年代的CLU和Ada语言中,后来被许多基于对象和面向对象的语言所...

  • 【Swift】泛型常见使用

    1、Swift泛型4种 泛型函数泛型类型泛型协议泛型约束 2、泛型约束3种 继承约束:泛型类型 必须 是某个类的子...

  • Java泛型(黑马程序员武汉中心)

    Java泛型 一、概述 1、泛型含义 2、泛型好处 3、泛型分类 二、常见的泛型案例 1、泛型方法 A.定义时 B...

  • Java泛型教程

    Java泛型教程导航 Java 泛型概述 Java泛型环境设置 Java泛型通用类 Java泛型类型参数命名约定 ...

  • 泛型

    泛型 1.为什么要有泛型?2.泛型有什么好处?3.Swift泛型语法4.泛型的使用 为什么要有泛型 在编程世界中,...

  • Swift-泛型笔记

    Swift 泛型 Swift 提供了泛型让你写出灵活且可重用的函数和类型。 Swift 标准库是通过泛型代码构建出...

  • Java 泛型

    泛型类 例如 泛型接口 例如 泛型通配符 泛型方法 类中的泛型方法 泛型方法与可变参数 静态方法与泛型 泛型上下边...

  • 理顺iOS(一)泛型

    1.1 泛型介绍 泛型的概念最早出自C++,Swift的泛型与其设计思路相同,与Java不同。 优缺点 C++与S...

网友评论

      本文标题:33 Swift泛型的发展历史与泛型的概述

      本文链接:https://www.haomeiwen.com/subject/qilmrdtx.html