Чтобы понять этот код, вы должны прочитать о замыканиях и функциях более высокого порядка.
Замыкание - это анонимная функция - блок кода, который не имеет имени.
Функция высшего порядка - это функция, которая принимает замыкание в качестве параметра, и где замыкание определяет, что должна делать эта функция.
Функция Sequence sorted(by:)
является примеромфункция более высокого порядка.Он принимает замыкание, которое берет два элемента из последовательности и возвращает true
, если первый элемент должен появиться первым в отсортированном выводе, или false в противном случае.
sorted()
- это функция общего назначения.Закрытие, которое вы передаете, сравнивает пары объектов и делает все остальное.
compactMap()
- еще одна функция более высокого порядка в различных коллекциях.В приведенном выше коде он выполняет compactMap для Dictionary
.
Код return elems.compactMap{...}
берет словарь elems
и передает каждую пару ключ / значение в словаре в ваше замыкание.Если ваше закрытие возвращает nil
для данной пары ключ / запись, эта запись удаляется из выходных данных.
Возврат, который вы видите внутри фигурных скобок для compactMap
, - это возврат для замыкания.И снова, compactMap вызывает ваше замыкание несколько раз, по одному разу для каждой пары ключ / значение в словаре, и замыкание должно возвращать значение для каждого вызова.