一、Swift泛型介绍
泛型是为Swift
编程灵活性的一种语法,在函数、枚举、结构体、类中都得到充分的应用,它的引入可以起到占位符的作用,当类型暂时不确定的,只有等到调用函数时才能确定具体类型的时候可以引入泛型。
我们之前实际上已经使用过泛型,例如:Swift
的Array
和Dictionary
类型都是泛型集。
你可以创建一个
Int
数组,也可创建一个String
数组,或者甚至于可以是任何其他Swift
的类型数据数组。同样的,你也可以创建存储任何指定类型的字典(Dictionary
),而且这些类型可以是没有限制的。
我们为什么要使用泛型呢?下面有个例子可以简单说明使用泛型的好处
//定义一个函数,要求追加数组数据到指定一个数组中
func appendIntToArray(src:[Int],inout dest:[Int])
{
// 遍历并加到数组后边
for element in src{
dest.append(element)
}
}
//使用copyIntArray添加整形数组数据
var arr = [2,5]
appendIntToArray([12,9], dest: &arr)
print(arr) // [2,5,12,9]
//那么再要求让你实现添加字符串呢,好吧重写一个
func appendStringToArray(src:[String],inout dest:[String])
{
for element in src{
dest.append(element)
}
}
//使用copyStringArray添加字符串数组数据
var strArr = ["oc","swift"]
appendStringToArray(["php", "C#"], dest: &strArr)
print(strArr) // ["oc", "swift", "php", "C#"]
//如果有需要你实现添加其他类型呢?
//是不是每个类型都需要写一个对应的函数去实现,那这样就太复杂了!这时候我们就需要使用泛型
//定义泛型函数,在普通函数名后面加上<T>,T是个类型占用符,可以表示任何类型
func appendArray<T>(src:[T],inout dest:[T])
{
for element in src
{
dest.append(element)
}
}
//看到如此强大了吧?然后随意使用
var arr2 = [5,8]
appendArray([9,58], dest: &arr2) //appendArray自动识别要添加的数组数据类型
print(arr2) //[5, 8, 9, 58]
var strArr2 = ["renhairui","hello"]
appendArray(["nihao", "helloworld"], dest: &strArr2)
print(strArr2) //["renhairui", "hello", "nihao", "helloworld"]
var doubleArr = [1.2,3.4