Ошибка идентификатора с замыканиями?|Свифт Тур - Закрытие - PullRequest
0 голосов
/ 17 марта 2019

Итак, в «Swift Tour» (https://docs.swift.org/swift-book/GuidedTour/GuidedTour.html) есть часть о замыканиях.
Код в их примере следующий:

numbers.map({ (number: Int) -> Int in
    let result = 3 * number
    return result
})

Но при попытке запустить это вы получаете следующую ошибку: « error: использование неразрешенного идентификатора 'numbers' "

Итак, мои вопросы:

  1. Что такое замыкания / Может ли кто-нибудь объяснить их использование?
  2. Что не так с примером (это официальный пример кода документации Swift ..)

1 Ответ

0 голосов
/ 17 марта 2019

Массив numbers объявлен в строке 12 предыдущего блока кода. Каждый блок кода, показанный в этой главе, основан на предыдущем. Вы можете скачать код для игровой площадки

Функциональный кодовый блок будет:

var numbers = [20, 19, 7, 12]

numbers.map({ (number: Int) -> Int in
    let result = 3 * number
    return result
})

Затворы более подробно описаны в их собственной главе , но вкратце:

Замыкания - это автономные блоки функциональности, которые можно передавать и использовать в вашем коде. Замыкания в Swift похожи на блоки в C и Objective-C и на лямбды в других языках программирования.

В случае функции map код в замыкании действует поочередно на каждый элемент массива. Он принимает элемент массива в качестве входных данных и возвращает элемент для выходного массива.

Вы можете вернуть 0 для нечетных чисел, используя функцию по модулю

let evens = numbers.map({ (number: Int) -> Int in
    if number % 2 == 0 {
        return number
    } else {
        return 0
    }
})
...