Iterate through a String Swift 2.0

Aaron picture Aaron · Jun 10, 2015 · Viewed 24.8k times · Source

I am trying to do a very simple piece of code in Swift playgrounds.

var word = "Zebra"

for i in word {
  print(i)
}

However, I always get an error on line 3.

'String' does not have a member named 'Generator'

Any ideas on why this doesn't work? Note: I am working in Xcode 7, with Swift 2.0 (Strings and Characters).

Answer

ABakerSmith picture ABakerSmith · Jun 10, 2015

As of Swift 2, String doesn't conform to SequenceType. However, you can use the characters property on String. characters returns a String.CharacterView which conforms to SequenceType and so can be iterated through with a for loop:

let word = "Zebra"

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

Alternatively, you could add an extension to String to make it conform to SequenceType:

extension String: SequenceType {}

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

Although, I'm sure Apple had a reason for removing String's conformance to SequenceType and so the first option seems like the better choice. It's interesting to explore what's possible though.