In Swift ist es noch einfacher:
let string : String = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
println(characters)
// [H, e, l, l, o, , 🐶, 🐮, , 🇩🇪]
Dies nutzt die Fakten, die
- ein
Array
kann aus einem erstellt werdenSequenceType
und erstellt werden
String
entspricht dem SequenceType
Protokoll und sein Sequenzgenerator zählt die Zeichen auf.
Und da Swift-Strings Unicode vollständig unterstützen, funktioniert dies auch mit Zeichen außerhalb der "Basic Multilingual Plane" (wie z. B. 🐶) und mit erweiterten Graphemclustern (wie z. B. 🇩🇪, die tatsächlich aus zwei Unicode-Skalaren bestehen).
Update: Ab Swift 2 String
nicht mehr konform
SequenceType
, aber die characters
Eigenschaft bietet eine Folge der Unicode-Zeichen:
let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string.characters)
print(characters)
Dies funktioniert auch in Swift 3 .
Update: Ab Swift 4 String
ist (wieder) eine Sammlung seiner
Character
s:
let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
print(characters)
// ["H", "e", "l", "l", "o", " ", "🐶", "🐮", " ", "🇩🇪"]
let joined = ", ".join(characters);
dem Array beizutreten ( ), zu einem führt ?'String' is not identical to 'Character'
Fehler führt?", ".join(...)
erwartet jedoch ein Array von Zeichenfolgen. Die folgende Antwort von devxoul zeigt, wie Sie sich in eine Reihe von Zeichenfolgen aufteilen können.characters
ist eine Sammlung und eine Ansicht der Zeichenfolgenzeichenfolgen. Durch das Erstellen eines Arrays aus den Zeichen wird eine Kopie erstellt. - Natürlich kann man direkt auf die Charaktere zugreifen:for i in string.characters.indices { print(string.characters[i]) }
oder einfachfor c in string.characters { print(c) }
Bearbeiten (Swift 4)
In Swift 4 müssen Sie nicht verwenden, um
characters
zu verwendenmap()
. Mach es einfachmap()
auf String.Oder wenn Sie kürzer bevorzugen:
"ABC".map(String.init)
(2 Bytes 😀)Bearbeiten (Swift 2 & Swift 3)
In Swift 2 und Swift 3 können Sie verwenden
map()
Funktion zurcharacters
Eigenschaft verwenden.Original (Swift 1.x)
Akzeptierte Antwort scheint nicht die beste zu sein, da sequenzkonvertiert
String
keineString
Sequenz ist, sondernCharacter
:Das unten funktioniert für mich:
Die Referenz für eine globale Funktion finden Sie
map()
hier: http://swifter.natecook.com/func/map/quelle
arr = map(str) { String($0) }
Array
stattdessen den Initialisierer:Array("ABC".characters)
"ABC".characters
undArray("ABC".characters)
."ABC".characters
Gibt einen Typ zurückString.CharacterView
. Um es in ein Array vom Typ "Typ" zu konvertieren,[Character]
müssen Sie denArray
Initialisierer verwenden.[String]
statt[Character]
weil op ein String Array wollte :)Es gibt auch diese nützliche Funktion für String: components (separateBy: String)
Funktioniert gut, um mit Zeichenfolgen umzugehen, die durch ein Zeichen wie ";" getrennt sind. oder sogar "\ n"
quelle
Aktualisiert für Swift 4
Hier sind 3 Möglichkeiten.
In einigen Fällen möchten die Leute wirklich eine Möglichkeit, eine Zeichenfolge in ein Array kleiner Zeichenfolgen mit jeweils 1 Zeichen Länge umzuwandeln. Hier ist eine super effiziente Möglichkeit, dies zu tun:
Swift 3
Hier sind 3 Möglichkeiten.
In einigen Fällen möchten die Leute wirklich eine Möglichkeit, eine Zeichenfolge in ein Array kleiner Zeichenfolgen mit jeweils 1 Zeichen Länge umzuwandeln. Hier ist eine super effiziente Möglichkeit, dies zu tun:
Oder Sie können String eine Erweiterung hinzufügen.
Dann können Sie es so nennen:
quelle
quelle
Die Antwort von Martin R ist der beste Ansatz. Da String dem SquenceType-Protokoll entspricht, können Sie auch einen String auflisten, wobei jedes Zeichen bei jeder Iteration abgerufen wird.
quelle
for character in characters { charactersArray.append(character)}
ohne dieenumeration()
In Swift 4 müssen Sie wie
String
in einer Sammlung vonCharacter
verwendenmap
quelle
Eine einfache Möglichkeit , dies zu tun ist , um
map
die Variable und zurück jeweilsCharacter
alsString
:Die Ausgabe sollte sein
["h", "e", "l", "l", "o"]
.quelle
Sie können auch eine Erweiterung erstellen:
quelle
quelle
für die Funktion für String: components (separateBy: String)
in Swift 5.1
habe geändert zu:
string.split(separator: "/")
quelle