泛型
基本概念
iOS 里泛型是 Swift 引入进来的, 可让你根据自定义的需求, 编写出适用于任意类型可复用的函数以及类型。
作用
避免写重复代码, 而是用一种清晰抽象的方式来表达代码意图。
解决的问题
例如: 任意两个相同类型的值,交换他俩的值。
Code
1 2 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