В Swift это еще проще:
let string : String = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
println(characters)
// [H, e, l, l, o, , 🐶, 🐮, , 🇩🇪]
Здесь используются факты, которые
- an
Array
может быть создан из a SequenceType
, и
String
соответствует SequenceType
протоколу, а его генератор последовательности перечисляет символы.
А поскольку строки Swift полностью поддерживают Unicode, это работает даже с символами за пределами «базовой многоязычной плоскости» (такими как) и с расширенными кластерами графем (такими как 🇩🇪, который фактически состоит из двух скаляров Unicode).
Обновление: Начиная с Swift 2, String
больше не соответствует
SequenceType
, но characters
свойство предоставляет последовательность символов Unicode:
let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string.characters)
print(characters)
Это также работает в Swift 3 .
Обновление: Начиная с Swift 4, String
это (снова) набор его
Character
s:
let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
print(characters)
// ["H", "e", "l", "l", "o", " ", "🐶", "🐮", " ", "🇩🇪"]
let joined = ", ".join(characters);
) массив приводит к'String' is not identical to 'Character'
ошибке?", ".join(...)
ожидает массив строк. Ответ devxoul ниже показывает, как можно разбить на массив строк.characters
это коллекция и представление о строковых символах. Создание массива из символов делает копию. - Конечно, можно получить доступ к персонажам напрямую:for i in string.characters.indices { print(string.characters[i]) }
или простоfor c in string.characters { print(c) }
Редактировать (Swift 4)
В Swift 4 вам не нужно использовать
characters
для использованияmap()
. Просто делайmap()
на String.Или, если вы предпочитаете короче:
"ABC".map(String.init)
(2 байта 😀)Редактировать (Swift 2 и Swift 3)
В Swift 2 и Swift 3 вы можете использовать
map()
функцию дляcharacters
свойства.Оригинал (Swift 1.x)
Принятый ответ не кажется лучшим, потому что преобразованная последовательность -
String
это неString
последовательность, аCharacter
:Это ниже работает для меня:
Ссылка на глобальную функцию
map()
находится здесь: http://swifter.natecook.com/func/map/источник
arr = map(str) { String($0) }
Array
Вместо этого используйте инициализатор:Array("ABC".characters)
"ABC".characters
иArray("ABC".characters)
."ABC".characters
Возвращает типString.CharacterView
. Чтобы преобразовать его в массив, в частности типа[Character]
, вам нужно будет использовать для негоArray
инициализатор.[String]
а не[Character]
потому, что оператору нужен строковый массив :)Также есть эта полезная функция для String: components (separatedBy: String)
Хорошо работает со строками, разделенными символом типа ";" или даже "\ n"
источник
Обновлено для Swift 4
Вот 3 способа.
В некоторых случаях люди действительно хотят преобразовать строку в массив маленьких строк длиной 1 символ каждая. Вот супер эффективный способ сделать это:
Свифт 3
Вот 3 способа.
В некоторых случаях люди действительно хотят преобразовать строку в массив маленьких строк длиной 1 символ каждая. Вот супер эффективный способ сделать это:
Или вы можете добавить расширение для String.
Тогда вы можете назвать это так:
источник
источник
Ответ Martin R - лучший подход, и, как он сказал, поскольку String соответствует протоколу SquenceType, вы также можете перечислять строку, получая каждый символ на каждой итерации.
источник
for character in characters { charactersArray.append(character)}
безenumeration()
В Swift 4, как
String
и в коллекцииCharacter
, вам нужно использоватьmap
источник
Легкий способ сделать это - обратиться
map
к переменной и вернуть каждуюCharacter
какString
:Выход должен быть
["h", "e", "l", "l", "o"]
.источник
Вы также можете создать расширение:
источник
источник
для функции на строке: компоненты (separaBy: строка)
в Swift 5.1
изменить на:
string.split(separator: "/")
источник