刚接触泛类我一开始是很抵触了....因为洒家实在看不懂T
这个是什么鬼, 玩不转看不懂.
直到发现很多优秀的开源库都用到<T>
, 虽然当时一脸萌逼的样子, 心里明白泛类是一个好东西.
为什么我们要用泛类?
很多时候我们构建一个函数或者一个类(结构体), 我们可以传入不同参数获取不同输出, 但是如果有一些函数输入是Int 输出 String, 有一些输入是String输出String, 内部的逻辑可以复用, 如果不用泛类那你就得写2个不同的函数或者类, 泛类能有效的防止你重复造轮子.
func swapValue<T>(inout intput: [T], inout output: [T]) {
let temp = intput
intput = output
output = temp
}
var a = ["a","b"]
var b = ["c","d"]
swapValue(&a, output: &b)
var c = [1,2]
var d = [3,4]
swapValue(&c, output: &d)
//a = ["c","d"], b = ["a","b"], c = [3,4], d = [1,2]
func mapValue<orignal,destination>(intput: [orignal],fn:(orignal) -> destination) -> [destination] {
var array = [destination]()
for value in intput {
let destinationValue = fn(value)
array.append(destinationValue)
}
return array
}
let orignalArray = [1,2,3]
let stringArray = mapValue(orignalArray) {
String($0)
}
let multipleArray = mapValue(orignalArray) {
$0 * 2
}
//stringArray: ["1", "2", "3"]
//multipleArray: [2, 4, 6]
struct Person<Value, U> {
var array = [Value]()
var array1 = [U]()
}
var person = Person<String,Int>()
person.array.append("fuck")
person. array1.append(11)
// Person<String, Int>
// array : 1 elements
// [0] : "fuck"
// array1 : 1 elements
// [0] : 11