2015-06-10 17 views
44

Ich versuche, ein sehr einfaches Stück Code in Swift Spielplätze zu tun.Iterate durch einen String Swift 2.0

var word = "Zebra" 

for i in word { 
    print(i) 
} 

Allerdings bekomme ich immer einen Fehler auf der Leitung 3.

'String' ist noch kein Mitglied

'Generator' genannt

Irgendwelche Ideen auf, warum dies nicht Arbeit? Hinweis: Ich arbeite in Xcode 7, mit Swift 2,0 (Strings and Characters).

Antwort

77

Ab Swift 2, String nicht SequenceType nicht entsprechen Sie können jedoch die characters Eigenschaft auf String verwenden characters eine String.CharacterView zurück, die zu SequenceType entspricht.. und so kann mit einem for iteriert werden durch:

let word = "Zebra" 

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

Alternativ können Sie eine Erweiterung String hinzufügen, um es zu SequenceType machen entsprechen:

extension String: SequenceType {} 

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

Obwohl ich sicher bin, hatte Apple einen Grund für die Entfernung String 's Konformität zu SequenceType und so scheint die erste Option wie die bessere Wahl. Es ist interessant zu erkunden, was möglich ist.

+0

der Grund, warum String ist nicht zu SequenceType entsprechen, dass die gleiche Zeichenfolge kann von mehr als einer Folge von Elementen dargestellt werden. – user3441734

9

String entspricht nicht mehr SequenceType. Allerdings können Sie die characters Eigenschaft es auf diese Weise Zugang:

var word = "Zebra" 

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

Beachten Sie, dass die Dokumentation noch nicht aktualisiert worden.

+0

Danke, das half mir, als ich nicht herausfinden konnte, wie man 'reverse' auf einem String benutzt. Es muss 'for char in string.characters.reverse() {...}' sein – pbush25

2

Swift 4

Forin loop:

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

Karte Beispiel:

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

forEach Beispiel:

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