通用函数与Any

时间:2015-08-09 01:15:18

标签: ios swift generic-function

我目前正在学习泛型函数的使用,并意识到他们使用文档中的一些现有示例解决了这个问题。

所以我继续重复执行相同方案的函数,我可以使用通用函数:

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

但如果我们再考虑一下,我们可以使用任何命令:

func swapTwoStrings(inout a: Any, inout b: Any) {
    let temporaryA = a
    a = b
    b = temporaryA
}

那么,如果我们可以使用任何来完成工作,为什么要使用通用功能

2 个答案:

答案 0 :(得分:1)

使用generic functions此处T是一种类型。在您的代码中,它表示a和be应该是同一类型。

func swapTwoValues<T>(inout a: T, inout b: T) {
    let temporaryA = a
    a = b
    b = temporaryA
}
var a = 1
var b = 2
var c = "1"
var d = "2"
var e = 1
var f = "2"
swapTwoValues(&a, &b)//rihgt
swapTwoValues(&c, &d) //rihgt
swapTwoValues(&e, &f) //Wrong

使用任何,你不知道,如果A和B是相同类型或没有。**所以,如果你的函数是复杂的,你必须动态检查的类型。**而且还有当你使用一些差异两个功能

func swapTwoAny(inout a: Any, inout b: Any) {
    let temporaryA = a
    a = b
    b = temporaryA
}

然后示例1

  var a = 1
  var b = "2"
  swapTwoAny(&a, &b)//Wrong

示例2

var a = 1 as Any
var b = "2" as Any
swapTwoAny(&a, &b) //Right.

答案 1 :(得分:0)

如果你只是交换东西,那么可能没有必要使用泛型而不是Any。如果您确实打算在参数上调用任何方法,那么您需要将它们转换为具有这些方法的类型(详细,可能在运行时失败,更慢),或者使用泛型参数。