Итерация через String Swift 2.0
Я пытаюсь сделать очень простой фрагмент кода на игровых площадках Swift.
var word = "Zebra"
for i in word {
print(i)
}
Однако, я всегда получаю сообщение об ошибке в строке 3.
'String' не имеет члена с именем 'Generator'
Любые идеи о том, почему это не работает? Примечание. Я работаю в Xcode 7 с Swift 2.0 (Строками и символами).
Ответы
Ответ 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)
}
Обратите внимание, что документация еще не обновлена.
Ответ 3
Swift 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
Ответ 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) })