一、范型
先来看一个swift功能函数代码块
初次一看,一脸懵,但凡对swift范型不了解,作为一个iOS开发你是读不懂这个代码的,有c plus 基础的同学或许会知道其表面,深层次含义仍旧不懂。swift 语言博采众长,用了各种语言的优势,比如js 的变量声明,比如c++,java面向对象。
swift 引入范型的意义,解决因为集合数据类型不一致,而需要写重复代码的问题。
定义
func 后面跟着占位类型名(T),并用尖括号括起来()。这个尖括号告诉 Swift 那个 T 是 func 函数定义内的一个占位类型名,因此 Swift 不会去查找名为 T 的实际类型。
实例
以下实例是一个泛型函数 exchange 用来交换两个 Int 和 String 值。
// 定义一个交换两个变量的函数
func swapTwoValues<T>(_ a: inout T, _ b: inout T) {
let temporaryA = a
a = b
b = temporaryA
}
var numb1 = 100
var numb2 = 200
print("交换前数据: \(numb1) 和 \(numb2)")
swapTwoValues(&numb1, &numb2)
print("交换后数据: \(numb1) 和 \(numb2)")
var str1 = "A"
var str2 = "B"
print("交换前数据: \(str1) 和 \(str2)")
swapTwoValues(&str1, &str2)
print("交换后数据: \(str1) 和 \(str2)")
以上程序执行输出结果为:
交换前数据: 100 和 200
交换后数据: 200 和 100
交换前数据: A 和 B
交换后数据: B 和 A
泛型类型
Swift 允许你定义你自己的泛型类型。 自定义类、结构体和枚举作用于任何类型,如同 Array 和 Dictionary 的用法。 接下来我们来编写一个名为 Stack (栈)的泛型集合类型,栈只允许在集合的末端添加新的元素(称之为入栈),且也只能从末端移除元素(称之为出栈)。