Синтаксис [0...20]
Массив, содержащий единственный закрытый диапазон из Int
, , а не массив Int (это то, что вы обычно хотите назвать map()
on), так что вы действительно хотите:
let integers = [
0, 1, 2, 3, 4, 5,
6, 7, 8, 9, 10, 11,
12, 13, 14, 15, 16,
17 ,18, 19, 20]
integers.map{
// your code here
}
(Мой первоначальный ответ пропустил это различие, я исправил его сейчас. Смотрите другие ответы о том, как преобразовать диапазон в массивInt
)
Оба будут выполнять блок в скобках 21 раз, по одному на каждое целое число в массиве.
Но в отличие от цикла for
ожидается, что функция map()
будет возвращать массив некоторого типа, где каждый элемент получается путем преобразования каждого из элементов в исходном массиве (в этом случае целые числа 0
- 20
) в экземпляр результирующего типа.Например:
let textRepresentations: [String] = integers.map {
return "\($0)"
}
// Now textRepresentations contains "0", "1", etc.
Если ваша цель состоит в том, чтобы собрать массив из объектов, созданных на основе этих 21 целых чисел, map()
даст вам более элегантное решение, чем вы.было бы сделано более «в стиле C», например:
var textRepresentations: [String] = []
for i in 0 ... 20 {
textRepresentations.append("\(i)")
}
Но если вам нужно выполнить некоторую логику только один раз для каждого из этих целых чисел, в результате чего массив не останется, используя map()
(и отбрасывание результата) будет выглядеть неловко и сбивать с толку людей, которые должны поддерживать этот код (включая ваше будущее Я).
Кроме того, более "Swifty" альтернативой циклу for ... in
является foreach
(что немного больше похоже на map()
, минус возвращаемый массив):
integers.foreach {
// (use $0 instead of i)
}
...or, more verbosely:
integers.foreach { (element) in
// (use `element`, of course)
}