2015-04-21 2 views
0

У меня эти очень простые строки кода:Нет выхода для функции карты в игровой площадке

var friends = ["Mike", "Marika", "Andreas", "Peter", "Sabine"] 

friends.map{ 
    println("Hallo \($0)!") 
} 

Это прекрасно работает в программе, но я не получаю выход на детской площадке. Это только говорит мне, что количество элементов и сколько раз нужно выполнять функцию. Но он не пишет строки.

Это я или это ошибка в Xcode?

enter image description here

ответ

4

Это не ошибка в Xcode. Пока ваш код map будет распечатываться до стандартного выхода (нажмите cmd-opt-enter, чтобы показать результат в редакторе помощника справа), стилистически вам следует избегать использования map для этого. Вы бы лучше с for...in цикла:

for friend in friends { 
    println("Hallo \(friend)") 
} 

Если вы быстро выглядят результаты на этот раз, вы увидите более полезный результат: quicklook

(заметьте, я переключился быстрый посмотрите на список, который показывает каждый результат, а не только последний)

Почему это работает по-другому? Это потому, что 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, которое не используется, должно интерпретироваться не как результат, а как то, что получилось на выходе стандартного, так это то, что он делает ,

Смежные вопросы