Generic functions can work with more than one concrete type while keeping type information.

Reuse one function shape

generic_functions.swift
func describePair<T>(_ first: T, _ second: T) -> String {
    return "\(first)|\(second)"
}

let firstNumber = 
let secondNumber = firstNumber + 2
let label = describePair(firstNumber, secondNumber)

print(label)
func describePair<T>(_ first: T, _ second: T) -> String {
    return "\(first)|\(second)"
}

let firstNumber = 
let secondNumber = firstNumber + 2
let label = describePair(firstNumber, secondNumber)

print(label)
func describePair<T>(_ first: T, _ second: T) -> String {
    return "\(first)|\(second)"
}

let firstNumber = 
let secondNumber = firstNumber + 2
let label = describePair(firstNumber, secondNumber)

print(label)
generic function A type parameter lets one function describe the same operation for different input types.