Generic functions are a powerful feature in Swift that allow you to write flexible, reusable code that can work with multiple types. They enable you to create functions that can operate on any type, promoting code reuse and reducing duplication.
Generic functions use placeholder types instead of actual types. This allows the function to work with various data types without the need for separate implementations for each type.
To define a generic function, use angle brackets <T>
after the function name, where T is a placeholder for the type:
func swapValues<T>(_ a: inout T, _ b: inout T) {
let temp = a
a = b
b = temp
}
Let's use our swapValues
function to swap integers and strings:
var x = 5, y = 10
swapValues(&x, &y)
print("x: \(x), y: \(y)") // Output: x: 10, y: 5
var a = "Hello", b = "World"
swapValues(&a, &b)
print("a: \(a), b: \(b)") // Output: a: World, b: Hello
Here's a generic function to find the first occurrence of an element in an array:
func findFirstOccurrence<T: Equatable>(_ item: T, in array: [T]) -> Int? {
for (index, element) in array.enumerated() {
if element == item {
return index
}
}
return nil
}
let numbers = [1, 2, 3, 4, 5]
if let index = findFirstOccurrence(3, in: numbers) {
print("Found 3 at index \(index)")
} else {
print("3 not found")
}
let fruits = ["apple", "banana", "orange"]
if let index = findFirstOccurrence("banana", in: fruits) {
print("Found banana at index \(index)")
} else {
print("Banana not found")
}
where
clauses to add more specific type constraints to your generic functions.As you become more comfortable with generic functions, you may want to explore more advanced concepts such as Swift Type Constraints and Swift Generic Where Clauses. These features allow you to create even more powerful and flexible generic functions.
Generic functions are a cornerstone of Swift's type system, enabling developers to write more flexible and reusable code. By mastering generic functions, you'll be able to create more efficient and maintainable Swift applications for both iOS and macOS platforms.