C'est encore plus simple dans Swift:
let string : String = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
println(characters)
// [H, e, l, l, o, , 🐶, 🐮, , 🇩🇪]
Cela utilise les faits qui
- un
Array
peut être créé à partir d'un SequenceType
, et
String
est conforme au SequenceType
protocole et son générateur de séquence énumère les caractères.
Et comme les chaînes Swift ont un support complet pour Unicode, cela fonctionne même avec des caractères en dehors du "Plan multilingue de base" (comme 🐶) et avec des clusters de graphèmes étendus (tels que 🇩🇪, qui est en fait composé de deux scalaires Unicode).
Mise à jour: à partir de Swift 2, String
n'est plus conforme à
SequenceType
, mais la characters
propriété fournit une séquence de caractères Unicode:
let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string.characters)
print(characters)
Cela fonctionne également dans Swift 3 .
Mise à jour: Depuis Swift 4, String
est (encore) une collection de ses
Character
s:
let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
print(characters)
// ["H", "e", "l", "l", "o", " ", "🐶", "🐮", " ", "🇩🇪"]
let joined = ", ".join(characters);
) le tableau entraîne une'String' is not identical to 'Character'
erreur?", ".join(...)
attend un tableau de chaînes. La réponse de devxoul ci-dessous montre comment vous pouvez vous diviser en un tableau de chaînes.characters
est une collection et une vue sur les chaînes de caractères. La création d'un tableau à partir des caractères fait une copie. - Bien sûr, on peut accéder directement aux personnages:for i in string.characters.indices { print(string.characters[i]) }
ou tout simplementfor c in string.characters { print(c) }
Modifier (Swift 4)
Dans Swift 4, vous n'avez pas besoin d'utiliser
characters
pour utilisermap()
. Faites simplementmap()
sur String.Ou si vous préférez plus court:
"ABC".map(String.init)
(2 octets 😀)Modifier (Swift 2 et Swift 3)
Dans Swift 2 et Swift 3, vous pouvez utiliser la
map()
fonction pour lacharacters
propriété.Original (Swift 1.x)
La réponse acceptée ne semble pas être la meilleure, car la conversion de séquence
String
n'est pas uneString
séquence, maisCharacter
:Ceci ci-dessous fonctionne pour moi:
La référence pour une fonction globale
map()
est ici: http://swifter.natecook.com/func/map/la source
arr = map(str) { String($0) }
Array
plutôt l' initialiseur:Array("ABC".characters)
"ABC".characters
etArray("ABC".characters)
."ABC".characters
renvoie un typeString.CharacterView
. Pour le convertir en un tableau, spécifiquement de type[Character]
, vous devez utiliser l'Array
initialiseur dessus.[String]
plutôt[Character]
parce que op voulait un tableau de chaînes :)Il existe également cette fonction utile sur String: components (sharedBy: String)
Fonctionne bien pour traiter les chaînes séparées par un caractère comme ";" ou même "\ n"
la source
Mis à jour pour Swift 4
Voici 3 façons.
Dans certains cas, ce que les gens veulent vraiment, c'est un moyen de convertir une chaîne en un tableau de petites chaînes de 1 caractère chacune. Voici un moyen très efficace de le faire:
Swift 3
Voici 3 façons.
Dans certains cas, ce que les gens veulent vraiment, c'est un moyen de convertir une chaîne en un tableau de petites chaînes de 1 caractère chacune. Voici un moyen très efficace de le faire:
Ou vous pouvez ajouter une extension à String.
Ensuite, vous pouvez l'appeler comme ceci:
la source
la source
La réponse de Martin R est la meilleure approche, et comme il l'a dit, comme String est conforme au protocole SquenceType, vous pouvez également énumérer une chaîne, en obtenant chaque caractère à chaque itération.
la source
for character in characters { charactersArray.append(character)}
sans leenumeration()
Dans Swift 4, tout comme
String
une collection deCharacter
, vous devez utilisermap
la source
Pour ce faire, vous pouvez facilement accéder à
map
la variable et renvoyer chacunCharacter
sous la forme d'unString
:La sortie doit être
["h", "e", "l", "l", "o"]
.la source
Vous pouvez également créer une extension:
la source
la source
pour la fonction sur String: components (sharedBy: String)
dans Swift 5.1
avoir le changement pour:
string.split(separator: "/")
la source