W Swift jest jeszcze łatwiej:
let string : String = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
println(characters)
// [H, e, l, l, o, , 🐶, 🐮, , 🇩🇪]
Wykorzystuje to fakt, że
Array
mogą być utworzone z SequenceType
, i
String
jest zgodny z SequenceType
protokołem, a jego generator sekwencji wylicza znaki.
A ponieważ łańcuchy Swift mają pełne wsparcie dla Unicode, działa to nawet ze znakami spoza „Basic Multilingual Plane” (np. 🐶) oraz z rozszerzonymi klastrami grafemowymi (takimi jak 🇩🇪, który w rzeczywistości składa się z dwóch skalarów Unicode).
Aktualizacja: od wersji Swift 2 String
nie jest już zgodny z
SequenceType
, ale characters
właściwość zapewnia sekwencję znaków Unicode:
let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string.characters)
print(characters)
Działa to również w Swift 3 .
Aktualizacja: Począwszy od Swift 4, String
jest (ponownie) zbiorem jego
Character
s:
let string = "Hello 🐶🐮 🇩🇪"
let characters = Array(string)
print(characters)
// ["H", "e", "l", "l", "o", " ", "🐶", "🐮", " ", "🇩🇪"]
let joined = ", ".join(characters);
) tablicy powoduje'String' is not identical to 'Character'
błąd?", ".join(...)
oczekuje tablicy ciągów. Odpowiedź devxoul poniżej pokazuje, jak można podzielić na tablicę ciągów.characters
to zbiór i widok znaków w postaci łańcuchów. Utworzenie tablicy ze znaków powoduje utworzenie kopii. - Oczywiście można uzyskać bezpośredni dostęp do postaci:for i in string.characters.indices { print(string.characters[i]) }
lub po prostufor c in string.characters { print(c) }
Edytuj (Swift 4)
W Swift 4 nie musisz
characters
używaćmap()
. Po prostu zróbmap()
na String.Lub jeśli wolisz krótszy:
"ABC".map(String.init)
(2 bajty 😀)Edytuj (Swift 2 i Swift 3)
W Swift 2 i Swift 3 możesz użyć
map()
funkcji docharacters
właściwości.Oryginał (Swift 1.x)
Zaakceptowana odpowiedź nie wydaje się najlepsza, ponieważ przekształcenie sekwencji
String
nie jestString
sekwencją, aleCharacter
:To poniżej działa dla mnie:
Odniesienie do funkcji globalnej
map()
jest tutaj: http://swifter.natecook.com/func/map/źródło
arr = map(str) { String($0) }
Array
Zamiast tego użyj inicjalizatora:Array("ABC".characters)
"ABC".characters
iArray("ABC".characters)
."ABC".characters
zwraca typString.CharacterView
. Aby przekonwertować go na tablicę, a konkretnie na typ,[Character]
musiałbyś użyć na niejArray
inicjatora.[String]
zamiast tego,[Character]
ponieważ op chciał tablicy ciągów :)Istnieje również ta przydatna funkcja na String: components (SeparatedBy: String)
Dobrze radzi sobie z ciągami znaków oddzielonymi znakiem, takim jak „;” lub nawet „\ n”
źródło
Zaktualizowano dla Swift 4
Oto 3 sposoby.
W niektórych przypadkach to, czego ludzie naprawdę chcą, to sposób na przekształcenie łańcucha w tablicę małych ciągów o długości 1 znaku każdy. Oto super skuteczny sposób na zrobienie tego:
Szybki 3
Oto 3 sposoby.
W niektórych przypadkach to, czego ludzie naprawdę chcą, to sposób na przekształcenie łańcucha w tablicę małych ciągów o długości 1 znaku każdy. Oto super skuteczny sposób na zrobienie tego:
Lub możesz dodać rozszerzenie do String.
Następnie możesz to nazwać tak:
źródło
źródło
Odpowiedź Martina R jest najlepszym podejściem, a jak powiedział, ponieważ String jest zgodny z protokołem SquenceType, możesz również wyliczyć ciąg, uzyskując każdy znak w każdej iteracji.
źródło
for character in characters { charactersArray.append(character)}
bezenumeration()
W Swift 4, podobnie jak
String
zbiórCharacter
, musisz użyćmap
źródło
Prostym sposobem na zrobienie tego jest
map
przejście do zmiennej i zwrócenie jejCharacter
jakoString
:Wynik powinien być
["h", "e", "l", "l", "o"]
.źródło
Możesz również utworzyć rozszerzenie:
źródło
źródło
dla funkcji na łańcuchu: składniki (oddzielone przez: ciąg)
w Swift 5.1
zmienić na:
string.split(separator: "/")
źródło