Что такое опциональное замыкание в Swift?

«Что такое опциональное замыкание в Swift?» — вопрос из категории Swift Core, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Опциональное замыкание — это замыкание, тип которого объявлен как опциональный (Optional). Оно может иметь значение nil.

Объявление:

var completionHandler: ((Result<Data, Error>) -> Void)?
var onTap: (() -> Void)?

Особенности и использование:

  1. Проверка перед вызовом: Замыкание нужно вызывать через опциональную цепочку (?) или предварительно развернуть.

    completionHandler?(.success(data)) // Безопасный вызов
    
    if let handler = onTap {
       handler() // Вызов после разворачивания
    }
  2. Применение: Часто используется для необязательных колбэков в асинхронных операциях, делегатах или конфигурации UI-компонентов.
  3. Память: Как и любое замыкание, может создавать циклы сильных ссылок. Для захвата self используйте [weak self] или [unowned self] в capture list.
    networkService.fetchData { [weak self] result in
       self?.handle(result) // Безопасный захват
    }