É ainda mais fácil no Swift:
let string : String = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
println(characters)
// [H, e, l, l, o, , 🐶, 🐮, , 🇩🇪]
Isso usa os fatos que
- um
Array
pode ser criado a partir de SequenceType
e
String
está em conformidade com o SequenceType
protocolo e seu gerador de seqüências enumera os caracteres.
E como as strings Swift têm suporte total para Unicode, isso funciona mesmo com caracteres fora do "Plano multilíngue básico" (como 🐶) e com clusters de grafema estendidos (como 🇩🇪, que na verdade é composto por dois escalares Unicode).
Atualização: A partir do Swift 2, String
não está mais em conformidade
SequenceType
, mas a characters
propriedade fornece uma sequência dos caracteres Unicode:
let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string.characters)
print(characters)
Isso funciona no Swift 3 também.
Atualização: A partir do Swift 4, String
é (novamente) uma coleção de seus
Character
s:
let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
print(characters)
// ["H", "e", "l", "l", "o", " ", "🐶", "🐮", " ", "🇩🇪"]
let joined = ", ".join(characters);
) a matriz resulta em um'String' is not identical to 'Character'
erro?", ".join(...)
espera uma matriz de strings. A resposta do devxoul abaixo mostra como você pode se dividir em uma série de strings.characters
é uma coleção e uma visão sobre os caracteres das strings. Criar uma matriz a partir dos caracteres faz uma cópia. - Claro que pode acessar os personagens diretamente:for i in string.characters.indices { print(string.characters[i]) }
ou apenasfor c in string.characters { print(c) }
Editar (Swift 4)
No Swift 4, você não precisa
characters
usarmap()
. Basta fazermap()
em String.Ou se você preferir mais curto:
"ABC".map(String.init)
(2 bytes 😀)Editar (Swift 2 e Swift 3)
No Swift 2 e Swift 3, você pode usar a
map()
função paracharacters
propriedade.Original (Swift 1.x)
A resposta aceita não parece ser a melhor, porque a sequência convertida
String
não é umaString
sequência, masCharacter
:Isso abaixo funciona para mim:
A referência para uma função global
map()
está aqui: http://swifter.natecook.com/func/map/fonte
arr = map(str) { String($0) }
Array
inicializador:Array("ABC".characters)
"ABC".characters
eArray("ABC".characters)
."ABC".characters
retorna um tipoString.CharacterView
. Para convertê-lo em uma matriz, especificamente do tipo[Character]
, você precisaria usar oArray
inicializador.[String]
, em vez de[Character]
por causa op queria uma matriz de cadeia :)Há também essa função útil em String: components (protectedBy: String)
Funciona bem para lidar com seqüências de caracteres separadas por um caractere como ";" ou até "\ n"
fonte
Atualizado para o Swift 4
Aqui estão três maneiras.
Em alguns casos, o que as pessoas realmente querem é uma maneira de converter uma string em uma série de pequenas strings com 1 caractere cada. Aqui está uma maneira super eficiente de fazer isso:
Swift 3
Aqui estão três maneiras.
Em alguns casos, o que as pessoas realmente querem é uma maneira de converter uma string em uma série de pequenas strings com 1 caractere cada. Aqui está uma maneira super eficiente de fazer isso:
Ou você pode adicionar uma extensão a String.
Então você pode chamar assim:
fonte
fonte
A resposta de Martin R é a melhor abordagem e, como ele disse, porque String está em conformidade com o protocolo SquenceType, você também pode enumerar uma string, obtendo cada caractere em cada iteração.
fonte
for character in characters { charactersArray.append(character)}
sem oenumeration()
No Swift 4, como
String
é uma coleção deCharacter
, você precisa usarmap
fonte
Uma maneira fácil de fazer isso é
map
a variável e retornar cadaCharacter
uma comoString
:A saída deve ser
["h", "e", "l", "l", "o"]
.fonte
Você também pode criar uma extensão:
fonte
fonte
para a função em String: components (selectedBy: String)
no Swift 5.1
altere para:
string.split(separator: "/")
fonte