Это не ошибка в Xcode. Пока ваш код map
будет распечатываться до стандартного выхода (нажмите cmd-opt-enter, чтобы показать результат в редакторе помощника справа), стилистически вам следует избегать использования map
для этого. Вы бы лучше с for...in
цикла:
for friend in friends {
println("Hallo \(friend)")
}
Если вы быстро выглядят результаты на этот раз, вы увидите более полезный результат:
(заметьте, я переключился быстрый посмотрите на список, который показывает каждый результат, а не только последний)
Почему это работает по-другому? Это потому, что map
не предназначен для запуска произвольного кода для вашего массива. Более конкретно для преобразование (т. Е. Отображение) вашего массива в другой массив. Поэтому предположим, вместо того, чтобы печатать список друзей, вы хотели список приветствий, вы можете сделать это:
let greetings = friends.map { friend in
"Hallo \(friend)"
}
greetings
теперь будет установлен новый массив из 5 строк, по одному для каждого имени, формы "Hallo <name>"
. map
принимает замыкание, которое берет строку и сопоставляет ее с новой строкой.
Так что происходит, когда вы пишете friends.map { println("...") }
, так это то, что map
вызывает замыкание и получает результат выражения в замыкании и заполняет его новым массивом. Так как println
возвращает Void
, результат этого выражения каждый раз равен Void
. И это то, что Void
показывает Xcode (как «(0 elements)
», как показывает пользовательский интерфейс Void
).
Вместо этого, для X-кода Xcode знает, что автономное значение println
, которое не используется, должно интерпретироваться не как результат, а как то, что получилось на выходе стандартного, так это то, что он делает ,