Swift 2.0 : 'enumerate' is unavailable: call the 'enumerate()' method on the sequence

15.6k views Asked by At

Just downloaded Xcode 7 Beta, and this error appeared on enumerate keyword.

for (index, string) in enumerate(mySwiftStringArray)
{

}

Can anyone help me overcome this ?

Also, seems like count() is no longer working for counting length of String.

let stringLength = count(myString)

On above line, compiler says :

'count' is unavailable: access the 'count' property on the collection.

Has Apple has released any programming guide for Swift 2.0 ?

3

There are 3 answers

1
Martin R On BEST ANSWER

Many global functions have been replaced by protocol extension methods, a new feature of Swift 2, so enumerate() is now an extension method for SequenceType:

extension SequenceType {
    func enumerate() -> EnumerateSequence<Self>
}

and used as

let mySwiftStringArray = [ "foo", "bar" ]
for (index, string) in mySwiftStringArray.enumerate() {
   print(string) 
}

And String does no longer conform to SequenceType, you have to use the characters property to get the collection of Unicode characters. Also, count() is a protocol extension method of CollectionType instead of a global function:

let myString = "foo"
let stringLength = myString.characters.count
print(stringLength)

Update for Swift 3: enumerate() has been renamed to enumerated():

let mySwiftStringArray = [ "foo", "bar" ]
for (index, string) in mySwiftStringArray.enumerated() {
    print(string)
}
0
nigel On

There was an update for Swift 2 on using enumerate().

Instead of enumerate(...), people should use

... .enumerate()

The reason is that many global functions have been replaced by protocol extension methods and they will get an enumerate error.

Hope this helps. All the best. n

0
Kai Windle On

I know this is a old thread but I've just been messing around with Swift 2.0 and Playgrounds and I came across the same problem I thought I'd share a solution which uses the enumerate() method for a String

// This line works in Swift 1.2
// for (idx, character) in enumerate("A random string, it has a comma.")

// Swift 2.x
let count = inputString.characters

for (idx, character) in count.enumerate() where character == "," {

    // Do something with idx
}

Hope this helps

Thanks Kai