美文网首页
Swift 5.x 为什么需要泛型

Swift 5.x 为什么需要泛型

作者: ShenYj | 来源:发表于2020-07-10 21:16 被阅读0次
    前言

    • 泛型程序最早出现1970年代的CLUAda语言中, 后来被许多机遇对象和面向对象的语言锁采用
      1993年C++在3.0版本中引入的模板技术就属于泛型编程
      1994年7月ANSI/ISO C++标准委员会通过的STL更是泛型编程的集大成者, 它已被纳入1998年9月C++标准之中.
      2004年9月JavaJ2SE 5.0(JDK 1.5)中开始使用泛型技术;
      2005年11月C# 2.0Visual Basic .NET 2005采用了在微软.NET框架2.0版中所引入的泛型方法

    • 1971年, Dave Musser首先提出并推广了泛型编程的理论, 但是主要局限于软件开发和计算机代数领域. 1979年, Alexander Stepanov开始研究泛型编程, 认识到泛型编程的巨大潜力, 提出了STL的体系结构.

    • 1993年11月, 受贝尔实验室Andrew Koening的邀请, StepanovANSI/ISO C++标准委员会的会议上, 介绍了泛型编程的理论和他们的工作. StepanovMeng Lee按委员会的要求, 于1994年3月提出了STL的草案. 委员会提出了一些修改意见, 其中最重要的是对关联容器的扩充, 由Musser完成了扩充部分的实现工作. 1994年7月, ANSI/ISO C++标准委员会终于通过了修改后的STL方案.

    参考书籍:


    参考书籍.png

    • 为什么需要泛型

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

    func swapTwoInts(_ a: inout Int, _ b: inout Int) {
        let temporaryA = a
        a = b
        b = temporaryA
    }
    

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

    func swapTwoStrings(_ a: inout String, _ b: inout String) {
        let temporaryA = a
        a = b
        b = temporaryA
    }
    
    func swapTwoDoubles(_ a: inout Double, _ b: inout Double) {
        let temporaryA = a
        a = b
        b = temporaryA
    }
    
    

    swapTwoInts(_:_:)swapTwoStrings(_:_:)swapTwoDoubles(_:_:)函数体是一样的.
    唯一的区别是他们接收值类型不同(IntStringDouble).

    而通过泛型, 我们就可以简化成一个通用函数覆盖到这些重复的代码.

    相关文章

      网友评论

          本文标题:Swift 5.x 为什么需要泛型

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