Подтвердить что ты не робот

Итерация через String Swift 2.0

Я пытаюсь сделать очень простой фрагмент кода на игровых площадках Swift.

var word = "Zebra"

for i in word {
  print(i)
}

Однако, я всегда получаю сообщение об ошибке в строке 3.

'String' не имеет члена с именем 'Generator'

Любые идеи о том, почему это не работает? Примечание. Я работаю в Xcode 7 с Swift 2.0 (Строками и символами).

4b9b3361

Ответ 1

Как и для Swift 2, String не соответствует SequenceType. Однако вы можете использовать свойство characters на String. characters возвращает String.CharacterView, который соответствует SequenceType и поэтому может быть повторен с помощью цикла for:

let word = "Zebra"

for i in word.characters {
    print(i)
}

В качестве альтернативы вы можете добавить расширение к String, чтобы оно соответствовало SequenceType:

extension String: SequenceType {}

// Now you can use String in for loop again.
for i in "Zebra" {
    print(i)
}

Хотя, я уверен, у Apple была причина для удаления String соответствия SequenceType, и поэтому первый вариант кажется лучшим выбором. Интересно изучить, что возможно, хотя.

Ответ 2

String больше не соответствует SequenceType. Однако вы можете получить доступ к свойству characters следующим образом:

var word = "Zebra"

for i in word.characters {
    print(i)
}

Обратите внимание, что документация еще не обновлена.

Ответ 4

Swift 4

Forin:

let word = "Swift 4"
for i in word {
    print(i)
}
Пример

map:

let word = "Swift 4"
_ = word.map({ print($0) })

для каждого примера:

let word = "Swift 4"
word.forEach({ print($0) })