Ответ
В Swift шаблонные функции создаются с помощью дженериков (generics). Параметр типа (например, T) позволяет функции работать с любым типом данных.
Базовый синтаксис:
func functionName<T>(_ parameter: T) -> T {
// ... тело функции
}
Пример: функция обмена значений:
func swapTwoValues<T>(_ a: inout T, _ b: inout T) {
let temporaryA = a
a = b
b = temporaryA
}
// Использование с разными типами:
var someInt = 3
var anotherInt = 107
swapTwoValues(&someInt, &anotherInt) // Работает с Int
var someString = "hello"
var anotherString = "world"
swapTwoValues(&someString, &anotherString) // Работает с String
Добавление ограничений (Constraints):
Можно требовать, чтобы тип соответствовал определенному протоколу или классу, используя where или синтаксис :.
// Функция работает только с типами, соответствующими протоколу Numeric
func add<T: Numeric>(_ a: T, _ b: T) -> T {
return a + b
}
let sumInt = add(5, 10) // 15
let sumDouble = add(3.14, 2.71) // 5.85
// add("a", "b") // Ошибка компиляции: String не соответствует Numeric
Дженерики применяются также к классам, структурам и перечислениям, обеспечивая безопасность типов и избегая дублирования кода.