swift 重新捡起来,温故知新

267 阅读2分钟

一、范型

先来看一个swift功能函数代码块

image.png 初次一看,一脸懵,但凡对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)")

以上程序执行输出结果为:

交换前数据:  100200
交换后数据: 200100
交换前数据:  AB
交换后数据: BA
泛型类型

Swift 允许你定义你自己的泛型类型。 自定义类、结构体和枚举作用于任何类型,如同 Array 和 Dictionary 的用法。 接下来我们来编写一个名为 Stack (栈)的泛型集合类型,栈只允许在集合的末端添加新的元素(称之为入栈),且也只能从末端移除元素(称之为出栈)。