Swift 泛型
在本教程中,我们将通过示例了解 Swift 泛型、如何创建泛型函数和类型及其优点。
Swift 让我们可以创建可用于不同数据类型的单个函数和类(或任何其他类型)。
这有助于我们重用代码。
Swift 泛型函数
在 Swift 中,我们可以创建可用于任何类型数据的函数。这样的函数称为泛型函数。
以下是我们如何在 Swift 中创建泛型函数:
// create a generic functionfunc displayData<T>(data: T){...}
这里,
我们已经创建了一个名为 displayData() 的泛型函数。
尖括号 <> 中使用的 T 称为类型参数。
根据传递给函数的值的类型,T 将替换为该数据类型(Int、String 等)。
T。实例:Swift 泛型函数
// create a generic functionfunc displayData<T>(data: T) {print("Generic Function:")print("Data Passed:", data)}// generic function working with StringdisplayData(data: "Swift")// generic function working with IntdisplayData(data: 5)
结果如下:
Generic Function:Data Passed: SwiftGeneric Function:Data Passed: 5
在上面的实例中,我们创建了一个名为 displayData() 的泛型函数,该函数带有类型参数 <T>。
现在,当我们调用泛型函数时,
displayData(data: "Swift")
我们已经传递了一个字符串值,因此占位符参数 T 自动替换为 String。
类似地,当我们将 Int 传递给泛型函数时,
displayData(data: 5)
占位符替换为 Int。
Swift 泛型类
与泛型函数类似,我们还可以创建一个可用于任何类型数据的类。这样的类称为泛型类。
让我们看一个例子,
// create a generic classclass Information<T> {// property of T typevar data: Tinit (data: T) {self.data = data}// method that return T type variablefunc getData() -> T {return self.data}}// initialize generic class with Int datavar intObj = Information<Int>(data: 6)print("Generic Class returns:", intObj.getData())// initialize generic class with String datavar strObj = Information<String>(data: "Swift")print("Generic Class returns:", strObj.getData())
结果如下:
Generic Class returns: 6Generic Class returns: Swift
在上面的例子中,我们创建了一个名为 Information 的泛型类。此类可用于处理任何类型的数据。
class Information<T> {...}
我们创建了两个 Information 对象
var intObj = Information<Int>(data: 6)var strObj = Information<String>(data: "Swift")
这里,
intObj- 类型参数T被 Int 替换。现在,Information处理整数数据。stringObj- 类型参数T替换为 String。现在,Information处理字符串数据。
Swift 泛型中的类型约束
通常,类型参数可以接受任何数据类型(Int、String、Double…)。
然而,如果我们只想对某些特定类型使用泛型(例如接受数字类型的数据),那么我们可以使用类型约束。
下面是我们如何创建类型约束:
func addition<T: Numeric>(num1: T, num2: T) {...}
这里,<T:Numeric> 向类型参数添加约束。它定义了 T 需要符合数字协议。
Numeric 是 Int 和 Double 等数值的内置协议。实例:类型约束
//create a generic function with type constraintfunc addition<T: Numeric>(num1: T, num2: T) {print("Sum:", num1 + num2)}// pass Int valueaddition(num1: 5, num2: 10)// pass Double valueaddition(num1: 5.5, num2: 10.8)
结果如下:
Sum: 15Sum: 16.3
在上面的实例中,我们创建了一个名为 addition() 的泛型函数。注意这个表达式,
<T: Numeric>
这里,泛型函数是用类型约束创建的。这意味着 addition() 只能处理符合 Numeric 协议(Int、Double 等)的数据类型。
argument type 'String' does not conform to the expected type 'Numeric'。Swift 泛型的优势
1.代码可重用性
借助 Swift 中的泛型,我们可以编写适用于不同类型数据的代码。例如,
func genericFunction<T>(data: T) {...}
这里,我们创建了一个泛型函数。这个函数也可以用于对整数数据、字符串数据等执行操作。
2.用于集合
Swift 数组使用泛型的概念。例如,
// creating a integer type arrayvar list1: Array<Int> = []// creating a string type arrayvar list2: Array<String> = []
这里是保存 Int 值的 list1 数组和保存 String 值的 list2 数组。
与数组类似,字典在 Swift 中也是泛型。