Вот несколько методов, связанных с универсальными функциями Swift:
- Общие функции: Swift позволяет определять функции, которые могут работать с разными типами, используя обобщенные функции. Используя универсальные параметры, вы можете создавать функции, достаточно гибкие для обработки различных типов входных данных.
Пример:
func swapValues<T>(_ a: inout T, _ b: inout T) {
let temp = a
a = b
b = temp
}
var num1 = 5
var num2 = 10
swapValues(&num1, &num2)
print("num1 =", num1) // Output: num1 = 10
print("num2 =", num2) // Output: num2 = 5
var str1 = "Hello"
var str2 = "World"
swapValues(&str1, &str2)
print("str1 =", str1) // Output: str1 = World
print("str2 =", str2) // Output: str2 = Hello
- Ограничения типов. Вы можете применять ограничения к параметрам универсального типа, чтобы ограничить типы, которые можно использовать с универсальной функцией. Это гарантирует, что функция будет работать только с типами, отвечающими определенным требованиям.
Пример:
func processArray<T: Numeric>(_ array: [T]) -> T {
var result: T = 0
for element in array {
result += element
}
return result
}
let numbers = [1, 2, 3, 4, 5]
let sum = processArray(numbers)
print("Sum:", sum) // Output: Sum: 15
let doubles = [1.5, 2.5, 3.5]
let total = processArray(doubles)
print("Total:", total) // Output: Total: 7.5
- Общие типы: помимо универсальных функций Swift также поддерживает универсальные типы. Вы можете определить общие структуры, классы и перечисления, которые могут работать с разными типами.
Пример:
struct Stack<T> {
private var elements: [T] = []
mutating func push(_ element: T) {
elements.append(element)
}
mutating func pop() -> T? {
return elements.popLast()
}
}
var stack = Stack<Int>()
stack.push(1)
stack.push(2)
stack.push(3)
print(stack.pop()) // Output: Optional(3)
print(stack.pop()) // Output: Optional(2)
print(stack.pop()) // Output: Optional(1)