泛型函数
// 泛型 `我设计一套逻辑, 这套逻辑和类型无关`
//在函数名后面写 `<T>` 泛型函数
func exchangeTwoThings<T>(a: inout T, b: inout T) {
(a, b) = (b, a)
}
泛型类型
struct Person<T1, T2> {
var a: T1
var b: T2
}
//这个 T1 和 T2 类型可以自己指定
let person: Person<String, Int> = Person(a: "小明", b: 99)
let person2 = Person<Float, Double>(a: 22, b: 0.22)
泛型约束
/// 示例代码1
/// 找到数组里面最大的元素
func topOne<T: Comparable>(array: [T]) -> T {
return array.reduce(array[0]){ max($0, $1) }
}
///示例代码2
protocol proA {}
protocol proB {}
func topThings<T: proA & proB & Comparable> (array: [T]) -> T? {
return array.reduce(nil, { (tempTop: T?, nextOne: T) in
/* 这里写自定义的逻辑... */
return tempTop
})
}
网友评论