Ответ
Да, можно. В Swift функции являются объектами первого класса (first-class citizens), что позволяет:
- Присваивать их переменным и константам
- Передавать в качестве аргументов другим функциям
- Возвращать из функций
Примеры:
// 1. Присвоение функции переменной
func multiply(_ a: Int, _ b: Int) -> Int { return a * b }
let mathOperation: (Int, Int) -> Int = multiply
let result = mathOperation(5, 3) // 15
// 2. Массив функций
let operations: [(Int, Int) -> Int] = [
{ $0 + $1 }, // Сложение
{ $0 - $1 }, // Вычитание
multiply // Умножение
]
// 3. Опциональный тип функции
var optionalFunction: ((String) -> Void)?
optionalFunction = { print($0) }
optionalFunction?("Hello") // Вызов через optional chaining
Ключевые моменты:
- Тип переменной должен точно соответствовать сигнатуре функции (параметры и возвращаемый тип).
- Для методов экземпляра используется связанная функция (bound method), которая захватывает контекст
self. - Для улучшения читаемости сложных сигнатур используйте
typealias.