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

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

var word = "Zebra"

for i in word {
  print(i)
}

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

«Строка» не имеет члена с именем «Генератор».

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


person Aaron    schedule 10.06.2015    source источник


Ответы (4)


Начиная со 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, поэтому первый вариант кажется лучшим выбором. Хотя интересно узнать, что возможно.

person ABakerSmith    schedule 10.06.2015
comment
причина, по которой String не соответствует SequenceType, заключается в том, что одна и та же String может быть представлена ​​более чем одной последовательностью элементов. - person user3441734; 21.11.2015

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

var word = "Zebra"

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

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

person lchamp    schedule 10.06.2015
comment
Спасибо, это помогло мне, когда я не мог понять, как использовать reverse в строке. Должно быть for char in string.characters.reverse() {...} - person pbush25; 13.12.2015

Свифт 4

Цикл Forin:

let word = "Swift 4"
for i in word {
    print(i)
}

Пример карты:

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

Пример forEach:

let word = "Swift 4"
word.forEach({ print($0) })
person Robert    schedule 06.06.2017

Свифт 3.0.1

Используйте свойство indices свойства characters для доступа ко всем indices отдельных символов в строке.

let greeting = "Guten Tag!"
for index in greeting.characters.indices {
print("\(greeting[index]) ", terminator: "")
}
// Prints "G u t e n   T a g ! "

посетите https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/StringsAndCharacters.html

person Hamed    schedule 18.01.2017