How can I convert a string "Hello" to an array ["H","e","l","l","o"] in Swift?
In Objective-C I have used this:
NSMutableArray *characters = [[NSMutableArray alloc] initWithCapacity:[myString length]];
for (int i=0; i < [myString length]; i++) {
NSString *ichar = [NSString stringWithFormat:@"%c", [myString characterAtIndex:i]];
[characters addObject:ichar];
}
It is even easier in Swift:
let string : String = "Hello ๐ถ๐ฎ ๐ฉ๐ช"
let characters = Array(string)
println(characters)
// [H, e, l, l, o, , ๐ถ, ๐ฎ, , ๐ฉ๐ช]
This uses the facts that
Array
can be created from a SequenceType
, andString
conforms to the SequenceType
protocol, and its sequence generator
enumerates the characters.And since Swift strings have full support for Unicode, this works even with characters outside of the "Basic Multilingual Plane" (such as ๐ถ) and with extended grapheme clusters (such as ๐ฉ๐ช, which is actually composed of two Unicode scalars).
Update: As of Swift 2, String
does no longer conform to
SequenceType
, but the characters
property provides a sequence of the
Unicode characters:
let string = "Hello ๐ถ๐ฎ ๐ฉ๐ช"
let characters = Array(string.characters)
print(characters)
This works in Swift 3 as well.
Update: As of Swift 4, String
is (again) a collection of its
Character
s:
let string = "Hello ๐ถ๐ฎ ๐ฉ๐ช"
let characters = Array(string)
print(characters)
// ["H", "e", "l", "l", "o", " ", "๐ถ", "๐ฎ", " ", "๐ฉ๐ช"]