码迷,mamicode.com
首页 > 其他好文 > 详细

二十一、泛型 Generics

时间:2015-02-05 17:48:13      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

1、概述

泛型是Swift中最强大的特性之一,使用泛型可以写出灵活、可重用、干净、抽象的代码,并且避免代码重复。实际上在第一章中我们就接触到了泛型,Array 和 Dictionary 是泛型容器,可以存入任何类型。

 

2. 泛型所要解决的问题 The Problem That Generics Solve

下面定义了一个交换两个值的函数,它没有使用泛型特性:

    func swapTwoInts(inout a: Int, inout b: Int) {
      let temporaryA = a
      a = b
      b = temporaryA
    }
    var someInt = 3
    var anotherInt = 107
    swapTwoInts(&someInt, &anotherInt)
    println("someInt is now \(someInt), and anotherInt is now \(anotherInt)")
    // prints "someInt is now 107, and anotherInt is now 3"

函数swapTwoInts只能用于整形,再定义两个函数:

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

 

3. 泛型方法 Generic Functions

泛型方法可以用于任何类型,将上面的方法使用泛型方法进行定义:

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

比较他们的不同点:

技术分享

泛型的版本使用了一个占位符(上面的函数是 T),表示实际的类型(Int, String, Double)。占位符 T 没有表明 T 的具体类型,仅仅表明了 a 和 b 都必须是相同的类型 T。T 的真正类型只有在 swapTwoValues 被调用时才确定。

尖括号 <> 用于表明 T 是一个占位符,代表某种类型。

调用上面定义的泛型函数:

    var someInt = 3
    var anotherInt = 107
    swapTwoValues(&someInt, &anotherInt)
    // someInt is now 107, and anotherInt is now 3
    var someString = "hello"
    var anotherString = "world"
    swapTwoValues(&someString, &anotherString)
    // someString is now "world", and anotherString is now "hello"

注意:Swift标准库中定义了泛型函数swap,与上面的函数功能相同。

 

4. Type Parameters

在上面swapTwoValues的例子中,T 就是 Type Parameter。

一旦你指定了一个 type parameter,

 

未完待续

二十一、泛型 Generics

标签:

原文地址:http://www.cnblogs.com/actionke/p/4275253.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!