泛型
- 泛型代码让你能够根据自定义的需求,编写出适用于任意类型、灵活可重用的函数及类型。
- 泛型可以避免代码的重复,用一种清晰和抽象的方式来表达代码的意图。
- 不具体的一个类型
//泛型解决的问题
func exchange(num1: inout Int,num2: inout Int) {
let tmp = num1;
num1 = num2;
num2 = tmp;
}
var a = 10;
var b = 20;
exchange(num1: &a, num2: &b);
//在交换值的过程中 我们使用的Int型,如果是Double或者String的类型,那么我们在写参数为Double/string的函数,所以泛型在这个时候起到很大的用途了
- 定义一个泛型的函数
//<>表示 T的泛型的名称
func exchange<T>(num1: inout T,num2: inout T) {
//注意:一旦T的类型确定以后,所有的T 都是该类型
// T 不可以是 多个类型的 在这里,因为运算是类型统一的
let tmp = num1;
num1 = num2;
num2 = tmp;
}
var a = 10;
var b = 20;
exchange(num1: &a, num2: &b);
exchange(num1: &a, num2: &b);
var c = "BBBBB";
var d = "cccccc";
exchange(num1: &c, num2: &d);
c
d
//结果是 :"cccccc" "BBBBB" 交换成功
- 协议中的泛型
- 用关键字 associatedtype
protocol Work {
associatedtype T
func run() -> T ;
func eat() -> T ;
}
class Person:Work {
func run() -> Person {
print("跑步")
return self;
}
func eat() -> Person {
print("吃饭");
return self;
}
}
- where子句约束
// 函数有一个泛型T,参数是:T where子句后面,说明T:这个类型是 Person类,在传入参数时应该是 Person实例
func test<T>(a:T)where T:Person {
}
网友评论