美文网首页
Swift3.0 - 泛型

Swift3.0 - 泛型

作者: 风从虎云从龙118 | 来源:发表于2017-08-22 11:27 被阅读0次
  • 泛型所解决的问题

先来看几个函数:

func swapTwoInts(_ a: inout Int, _ b: inout Int) { let temporaryA = a
a= b
b = temporaryA
}
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
}

上面三个函数的功能都是相同的,即交换两个变量的值,唯一不同之处就在于传入的变量类型不同,分别是 IntStringDouble 。而实际应用中,为了实现相同的功能却要实现多个函数,这显然不是我们最想要的,幸运的是,泛型代码很好的解决了这个问题。

注意:
在上面三个函数中, ab 类型相同。如果 ab 类型不同,那它们俩就不能互换值。Swift 是类型安全的语言,所以它不允许一个 String 类型的变量和一个 Double 类型的变量互换值。试图这样做将导致编译错误。

泛型代码实现:

func swapTwoValues<T>(_ a: inout T, _ b: inout T) { 
let temporaryA = a
a= b
b = temporaryA
}

这个函数的泛型版本使用了占位类型名(在这里用字母 T 来表示)来代替实际类型名(例如 IntStringDouble )。占位类型名没有指明 T 必须是什么类型,但是它指明了 ab 必须是同一类型 T ,无论 T 代表什么类型。只有swapTwoValues(_:_:) 函数在调用时,才能根据所传入的实际类型决定 T 所代表的类型。

另外一个不同之处在于这个泛型函数名( swapTwoValues(_:_:) )后面跟着占位类型名( T ),并用尖括号括起 来( <T> )。这个尖括号告诉 Swift 那个 TswapTwoValues(_:_:) 函数定义内的一个占位类型名,因此 Swift 不会去查找名为 T 的实际类型。

相关文章

  • Swift3.0 - 泛型

    泛型所解决的问题 先来看几个函数: 上面三个函数的功能都是相同的,即交换两个变量的值,唯一不同之处就在于传入的变量...

  • Swift3.0 - 泛型

    Swift3.0 - 真的很简单Swift3.0 - 数据类型Swift3.0 - ArraySwift3.0 -...

  • iOS Swift3.0 泛型

    联系人:石虎 QQ:1224614774昵称:嗡嘛呢叭咪哄 QQ群:807236138群称:iOS 技术交流学习群...

  • Swift3.0泛型的使用

    Swift 有泛型,但是这次是为了引进新的特性,就像递归协议约束(使得受限的扩展遵循新协议的能力),比如遵循 Eq...

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

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

  • 【泛型】通配符与嵌套

    上一篇 【泛型】泛型的作用与定义 1 泛型分类 泛型可以分成泛型类、泛型方法和泛型接口 1.1 泛型类 一个泛型类...

  • 泛型的使用

    泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法 泛型类 泛型接口 泛型通配符 泛型方法 静态方法与...

  • Java 泛型

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

  • Swift3.0 利用泛型设置基类属性的动态类型

    Swift3.0 利用泛型设置基类属性的动态类型 原文链接在MVVM架构的项目中,我们一般会写一个viewMode...

  • 探秘 Java 中的泛型(Generic)

    本文包括:JDK5之前集合对象使用问题泛型的出现泛型应用泛型典型应用自定义泛型——泛型方法自定义泛型——泛型类泛型...

网友评论

      本文标题:Swift3.0 - 泛型

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