Open In App

Swift – Functions and its types

A function in Swift is a standalone section of code that completes a particular job. Code is organized into functions that can be called repeatedly throughout a program to make it simpler to understand and maintain.

Here’s the basic syntax for defining a function in Swift:






func functionName(argument1: Type, argument2: Type, ...) -> ReturnType {
    // function body
    return returnValue
}

Parameters passed to functions:

For example, here’s a simple function that takes two integer arguments and returns their sum:






func addNumbers(number1: Int, number2: Int) -> Int {
    let result = number1 + number2
    return result
}
 
//This function can be called like this:
let sum = addNumbers(number1: 5, number2: 7)
print(sum) // Output: 12

Swift functions can have multiple return values using tuples:




func calculateStatistics(numbers: [Int]) -> (min: Int, max: Int, sum: Int) {
    var min = numbers[0]
    var max = numbers[0]
    var sum = 0
 
    for number in numbers {
        if number < min {
            min = number
        } else if number > max {
            max = number
        }
        sum += number
    }
 
    return (min, max, sum)
}
 
//This function takes an array of integers as an argument and returns a tuple containing the minimum value, maximum value, and sum of the numbers.
let statistics = calculateStatistics(numbers: [5, 3, 10, 2, 7])
print(statistics.min) // Output: 2
print(statistics.max) // Output: 10
print(statistics.sum) // Output: 27

 

Types of Functions:

In Swift, there are several types of functions. Let’s take a look at each one:

1. Global Functions: These are functions that are defined outside of any class, structure or enumeration. Global functions can be called from anywhere within the program.




// Define a function that takes an array of integers as input and returns an integer as output
func calculateSum(_ numbers: [Int]) -> Int {
    // Create a variable to hold the sum of the numbers in the input array
    var sum = 0
     
    // Loop through each number in the input array
    for number in numbers {
        // Add the current number to the sum variable
        sum += number
    }
     
    // Return the sum of the input numbers
    return sum
}
 
// Create an array of numbers
let numbers = [1, 2, 3, 4, 5]
 
// Call the calculateSum function and pass in the numbers array as input
let sum = calculateSum(numbers)
 
// Print the output of the function
print(sum) // Output: 15

Output:

 

2. Nested Function: These are functions that are defined within another function. Nested functions can only be called from within the enclosing function.
 




// Define a function that takes two integers as input and returns an integer as output
func outerFunction(_ number1: Int, _ number2: Int) -> Int {
    // Define a nested function that takes an integer as input and returns an integer as output
    func innerFunction(_ number: Int) -> Int {
        // Multiply the input number by 2 and return the result
        return number * 2
    }
     
    // Call the innerFunction twice with the input numbers and add the results together
    let result1 = innerFunction(number1)
    let result2 = innerFunction(number2)
    return result1 + result2
}
 
// Define two input numbers
let number1 = 3
let number2 = 5
 
// Call the outerFunction with the input numbers
let result = outerFunction(number1, number2)
 
// Print the output of the function
print(result) // Output: 16

Output:

 

3. Methods: These functions are defined as part of a class, structure, or enumeration. Methods can access and modify the properties of that type.




// Define a class with a method that takes two integers as input and returns an integer as output
class Calculator {
    func addNumbers(_ number1: Int, _ number2: Int) -> Int {
        // Add the input numbers together and return the result
        return number1 + number2
    }
}
 
// Create an instance of the Calculator class
let calculator = Calculator()
 
// Call the addNumbers method on the calculator instance with two input numbers
let result = calculator.addNumbers(5, 7)
 
// Print the output of the method
print(result) // Output: 12

Output:

 

4. Closures: These are self-contained blocks of code that can be assigned to a variable or passed as an argument to a function.




// Define an array of numbers
let numbers = [1, 2, 3, 4, 5]
 
// Use the filter method to create a new array with only the even numbers from the input array
let filteredNumbers = numbers.filter { $0 % 2 == 0 }
 
// Print the output of the filter method
print(filteredNumbers) // Output: [2, 4]

Output:

 

5. Higher-order Functions: These are functions that take other functions as arguments or return functions as their result.




// Define a function that takes an array of integers and a closure as input and returns an array of integers as output
func filterIntegers(_ numbers: [Int], _ isIncluded: (Int) -> Bool) -> [Int] {
    // Create an empty array to hold the filtered integers
    var result = [Int]()
     
    // Loop through each number in the input array
    for number in numbers {
        // Call the closure on the current number to determine if it should be included in the output array
        if isIncluded(number) {
            // Add the current number to the output array if the closure returns true
            result.append(number)   
        }
}
 
// Return the filtered array of integers
return result
}
 
// Define an array of numbers
let numbers = [1, 2, 3, 4, 5]
 
// Define a closure that returns true for even numbers and false for odd numbers
let isEven: (Int) -> Bool = { $0 % 2 == 0 }
 
// Call the filterIntegers function with the input array and closure
let filteredNumbers = filterIntegers(numbers, isEven)
 
// Print the output of the function
print(filteredNumbers) // Output: [2, 4]

Output:

 


Article Tags :