泛型函数
泛型函数
可以工作于任何类型,这里是一个上面swapTwoInts
函数的泛型版本,用于交换两个值:
func swapTwoValues<T>(inout a: T, inout b: T) {
let temporaryA = a
a = b
b = temporaryA
}
swapTwoValues
函数主体和swapTwoInts
函数是一样的,它只在第一行稍微有那么一点点不同于swapTwoInts
,如下所示:
func swapTwoInts(inout a: Int, inout b: Int)
func swapTwoValues<T>(inout a: T, inout b: T)
这个函数的泛型版本使用了占位类型名字(通常此情况下用字母T
来表示)来代替实际类型名(如In
、String
或Doubl
)。占位类型名没有提示T
必须是什么类型,但是它提示了a
和b
必须是同一类型T
,而不管T
表示什么类型。只有swapTwoValues
函数在每次调用时所传入的实际类型才能决定T
所代表的类型。
另外一个不同之处在于这个泛型函数名后面跟着的展位类型名字(T)是用尖括号括起来的(<T>
)。这个尖括号告诉 Swift 那个T
是swapTwoValues
函数所定义的一个类型。因为T
是一个占位命名类型,Swift 不会去查找命名为T的实际类型。
swapTwoValues
函数除了要求传入的两个任何类型值是同一类型外,也可以作为swapTwoInts
函数被调用。每次swapTwoValues
被调用,T所代表的类型值都会传给函数。
在下面的两个例子中,T
分别代表Int
和String
:
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"
注意
上面定义的函数swapTwoValues
是受swap
函数启发而实现的。swap
函数存在于 Swift 标准库,并可以在其它类中任意使用。如果你在自己代码中需要类似swapTwoValues
函数的功能,你可以使用已存在的交换函数swap
函数。
易百教程移动端:请扫描本页面底部(右侧)二维码并关注微信公众号,回复:"教程" 选择相关教程阅读或直接访问:http://m.yiibai.com 。
加QQ群啦,易百教程官方技术学习群
注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。
- Java技术群: 227270512 (人数:2000,免费:否)
- Go开发者群(新): 851549018 (人数:1000,免费)
- PHP开发者群: 460153241 (人数:2000,免费)
- MySQL/SQL群: 418407075 (人数:2000,免费:否)
- 大数据开发群: 655154550 (人数:2000,免费:否)
- Python技术群: 287904175 (人数:2000,免费:否)
- 人工智能深度学习: 456236082 (人数:2000,免费:否)
- 测试工程师群: 415553199 (人数:2000,免费:否)
- 前端开发者群: 410430016 (人数:2000,免费:否)
- C/C++技术群(新): 629264796 (人数:2000,免费)
- Node.js技术群(新): 621549808 (人数:2000,免费)
- PostgreSQL数据库群: 539504187 (人数:1000,免费)
- Linux运维技术群: 479429477 (人数:2000,免费:否)
- Oracle数据库: 175248146 (人数:2000,免费:否)
- C#/ASP.Net开发者: 579821706 (人数:2000,免费)
- 数据分析师群: 397883996 (人数:2000,免费:否)