关键词:Swift, iOS, 泛型
概述
泛型代码让你能根据自定义的需求,编写出适用于任意类型的、灵活可复用的函数及类型。
示例
泛型的使用
//泛型限定数组内的元素为Item类型
func makeArray<Item>(itm:Item, num:Int) -> [Item] {
//将itm重复num次,放入一个数组中
var result = [Item]()
for _ in 0 ..< num {
result.append(itm)
}
return result
}
let res = makeArray(itm: "一个元素", num: 5)
print("得到的结果:\(res)")
泛型函数
使函数参数可以接收任何类型。
// 泛型函数。
// <AAA>表示,参数类型AAA只是一个占位符,不需要真实存在。使参数param可以处理任何类型的数据。
func showFan<AAA>(param:AAA) {
print("传进来的参数:\(param)")
}
showFan(param: "aaa")
泛型命名类型参数
描述参数类型。
// 泛型命名类型参数。
// 限制了这个数组的元素类型。
var aArr: Array<String> = Array()
aArr.insert("aa", at: 0)
print("aArr内容:\(aArr)")
泛型类型约束
约束泛型继承的父类,或者遵循的协议。
// 泛型类型约束。约束泛型继承的父类,或者遵循的协议。
func someFunc<AAA: UIView, BBB: UITableViewDelegate>(param1: AAA, param2: BBB) {
print("第一个参数:\(param1) 第二个参数:\(param2)")
}
泛型where语句
为泛型函数、下标、类型的类型参数定义一些强制要求。
// 泛型where语句
class someClass {
var pro1: String?
var pro2: Int?
}
//这里约束泛型Fan必须继承自someClass
func someFun1<Fan>(param1: Fan, param2: Fan) -> Void where Fan: someClass {
print("参数:\(param1.pro1 ?? "")")
}
let cla1 = someClass()
cla1.pro1 = "aaa"
someFun1(param1: cla1, param2: cla1)