发布于 2015-06-14 01:45:43 | 119 次阅读 | 评论: 0 | 来源: 网络整理

泛型所解决的问题

这里是一个标准的,非泛型函数swapTwoInts,用来交换两个Int值:


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

这个函数使用写入读出(in-out)参数来交换ab的值,请参考写入读出参数

swapTwoInts函数可以交换b的原始值到a,也可以交换a的原始值到b,你可以调用这个函数交换两个Int变量值:


var someInt = 3
var anotherInt = 107
swapTwoInts(&someInt, &anotherInt)
println("someInt is now (someInt), and anotherInt is now (anotherInt)")
// 输出 "someInt is now 107, and anotherInt is now 3"

swapTwoInts函数是非常有用的,但是它只能交换Int值,如果你想要交换两个String或者Double,就不得不写更多的函数,如 swapTwoStringsswapTwoDoublesfunctions,如同如下所示:


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
}

你可能注意到 swapTwoInts、 swapTwoStringsswapTwoDoubles函数功能都是相同的,唯一不同之处就在于传入的变量类型不同,分别是IntStringDouble

但实际应用中通常需要一个用处更强大并且尽可能的考虑到更多的灵活性单个函数,可以用来交换两个任何类型值,很幸运的是,泛型代码帮你解决了这种问题。(一个这种泛型函数后面已经定义好了。)


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

最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务