2015-06-10 12 views
44

Próbuję zrobić bardzo prosty fragment kodu na placach zabaw Swift.Iteracja poprzez String Swift 2.0

var word = "Zebra" 

for i in word { 
    print(i) 
} 

Ja jednak zawsze pojawia się błąd na linii 3.

'String' nie ma elementu o nazwie 'generator'

pomysłów na to, dlaczego nie robi praca? Uwaga: Pracuję w Xcode 7, z Swift 2.0 (Strings and Characters).

Odpowiedz

77

Od Swift 2 String nie odpowiada SequenceType Jednakże, można użyć właściwości characters na Stringcharacters zwraca String.CharacterView zgodnego SequenceType.. i tak można powtórzyć za pomocą pętli z for:

let word = "Zebra" 

for i in word.characters { 
    print(i) 
} 

Alternatywnie, można dodać rozszerzenie do String aby spełniać SequenceType:

extension String: SequenceType {} 

// Now you can use String in for loop again. 
for i in "Zebra" { 
    print(i) 
} 

Chociaż, jestem pewien, Apple miał powód do usunięcia zgodności z String z SequenceType, więc pierwsza opcja wydaje się lepszym wyborem. Interesujące jest zbadanie, co jest możliwe.

+0

powód String nie odpowiada SequenceType jest to, że ten sam ciąg może być reprezentowany przez więcej niż jednej sekwencji elementów. – user3441734

9

String nie jest już zgodny z SequenceType. Jednak można uzyskać dostępu do właściwości characters o tym w ten sposób:

var word = "Zebra" 

for i in word.characters { 
    print(i) 
} 

Należy pamiętać, że dokumentacja nie został jeszcze zaktualizowany.

+0

Dzięki temu pomogło mi to, gdy nie mogłem wymyślić, jak używać 'reverse' na Stringie. Musi to być 'char char.characterss.reverse() {...}' – pbush25

2

Swift 4

Forin pętla:

let word = "Swift 4" 
for i in word { 
    print(i) 
} 

mapa przykład:

let word = "Swift 4" 
_ = word.map({ print($0) }) 

forEach przykład:

let word = "Swift 4" 
word.forEach({ print($0) })