泛型
基本概念
iOS 里泛型是 Swift 引入进来的, 可让你根据自定义的需求, 编写出适用于任意类型可复用的函数以及类型。
作用
避免写重复代码, 而是用一种清晰抽象的方式来表达代码意图。 
解决的问题
例如: 任意两个相同类型的值,交换他俩的值。
Code
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 
 | import UIKit
 var str = "Hello, playground"
 
 func swapTwoInts(_ a: inout Int, _ b: inout Int) {
 let temporaryA = a
 a = b
 b = temporaryA
 }
 
 var numb1 = 100
 var numb2 = 200
 
 print("交换前数据: \(numb1) 和 \(numb2)")
 swapTwoInts(&numb1, &numb2)
 print("交换后数据: \(numb1) 和 \(numb2)")
 
 
 
 
 
 func swapTwoStrings(_ a: inout String, _ b: inout String) {
 let temporaryA = a
 a = b
 b = temporaryA
 }
 
 
 var str1 = "1111"
 var str2 = "2222"
 print("交换前数据: \(str1) 和 \(str2)")
 swapTwoStrings(&str1, &str2)
 print("交换后数据: \(str1) 和 \(str2)")
 
 
 
 
 
 
 
 
 
 func swapTwoValues<T>(_ a: inout T, _ b: inout T) {
 let temporaryA = a
 a = b
 b = temporaryA
 }
 
 var num1 = 100
 var num2 = 200
 print("交换前数据: \(num1) 和 \(num2)")
 swapTwoValues(&num1, &num2)
 print("交换后数据: \(num1) 和 \(num2)")
 
 
 
 
 
 
 
 
 var string1 = "AAAA"
 var string2 = "BBBB"
 print("交换前字符串: \(string1) 和 \(string2)")
 swapTwoValues(&string1, &string2)
 print("交换后字符串: \(string1) 和 \(string2)")
 
 
 
 
 
 
 
 
 
 
 | 
泛型格式
| 1
 | func funcName<T>(para: T) { } 
 | 
类型名:T
占位符类型名, 而不是 String Int Double这种实际类型。 占位类型用来笼统代表这些实际类型名。
类型名T的作用
表示告诉Swift,我是泛型类型名,不是实际类型名,Swift就不会去查找T实际的类型名,不会导致语法报错。
参考SwiftGG
参考RUNOOB