我目前正在学习泛型函数的使用,并意识到他们使用文档中的一些现有示例解决了这个问题。
所以我继续重复执行相同方案的函数,我可以使用通用函数:
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
}
那么,如果我们可以使用任何来完成工作,为什么要使用通用功能?
答案 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。如果您确实打算在参数上调用任何方法,那么您需要将它们转换为具有这些方法的类型(详细,可能在运行时失败,更慢),或者使用泛型参数。