Этот вопрос проверяет знание функций высшего порядка в Swift и понимание различий между map, compactMap и flatMap.
Функции высшего порядка принимают или возвращают функции. Основные: map преобразует каждый элемент, compactMap также удаляет nil, а flatMap преобразует и "разворачивает" результат (например, преобразует массив массивов в плоский массив).
Функции высшего порядка позволяют писать более декларативный и выразительный код.
1. map:
Применяет функцию к каждому элементу коллекции и возвращает новую коллекцию.
Не меняет тип элемента.
2. compactMap:
Как map, но также фильтрует nil значения.
Полезно для безопасного преобразования.
3. flatMap:
Преобразует каждый элемент и "разворачивает" результат (например, если преобразование возвращает массив, flatMap сделает его плоским).
В последних версиях Swift заменён на compactMap для удаления nil и flatMap для разворачивания.
Пример:
let numbers = ["1", "2", "three"]
let mapped = numbers.map { Int($0) } // [Optional(1), Optional(2), nil]
let compactMapped = numbers.compactMap { Int($0) } // [1, 2]
let nested = [[1, 2], [3, 4]]
let flatMapped = nested.flatMap { $0 } // [1, 2, 3, 4]