Ответ
Да, строка (String) в Swift является коллекцией символов (Character), поэтому по ней можно итерироваться.
Основные способы:
-
Прямая итерация по символам:
let greeting = "Привет, мир!" for character in greeting { print(character) // Каждый Character (графем-кластер) } -
С использованием индексов (рекомендуется для модификации):
for index in greeting.indices { print(greeting[index]) // Безопасный доступ по индексу } -
С получением индексов через
enumerated():for (offset, character) in greeting.enumerated() { print("Позиция (offset): (character)") }
Ключевые особенности строк в Swift:
- Строки работают с Unicode, поэтому один
Characterможет состоять из нескольких Unicode скаляров - Не используйте целочисленные индексы — это вызовет ошибку компиляции
- Для доступа по позиции используйте
String.Index:let firstIndex = greeting.startIndex let fifthIndex = greeting.index(firstIndex, offsetBy: 4) print(greeting[fifthIndex]) // "т" - Для производительности при многократном доступе конвертируйте строку в массив:
Array(greeting)