web-dev-qa-db-fra.com

Swift 2.0: 'enumerate' n'est pas disponible: appelez la méthode 'enumerate ()' sur la séquence

Je viens de télécharger Xcode 7 Beta, et cette erreur est apparue sur le mot clé enumerate.

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

}

Quelqu'un peut-il m'aider à surmonter cela?

De plus, il semble que count() ne fonctionne plus pour compter la longueur de String.

let stringLength = count(myString)

Sur la ligne ci-dessus, le compilateur dit:

'count' n'est pas disponible: accédez à la propriété 'count' sur la collection.

A Apple a publié un guide de programmation pour Swift 2.0?

34
itsji10dra

De nombreuses fonctions globales ont été remplacées par les méthodes d'extension de protocole , une nouvelle fonctionnalité de Swift 2, donc enumerate() est maintenant une méthode d'extension pour SequenceType:

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

et utilisé comme

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

Et String n'est plus conforme à SequenceType, vous devez utiliser la propriété characters pour obtenir la collection de caractères Unicode. De plus, count() est une méthode d'extension de protocole de CollectionType au lieu d'une fonction globale:

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

Mise à jour pour Swift 3:enumerate() a été renommé enumerated():

let mySwiftStringArray = [ "foo", "bar" ]
for (index, string) in mySwiftStringArray.enumerated() {
    print(string)
}
105
Martin R

Il y avait une mise à jour pour Swift 2 sur l'utilisation de enumerate ().

Au lieu de enumerate(...), les gens devraient utiliser

... .enumerate()

La raison en est que de nombreuses fonctions globales ont été remplacées par des méthodes d'extension de protocole et qu'elles obtiendront une erreur d'énumération.

J'espère que cela t'aides. Bonne chance. n

5
nigel

Je sais que c'est un vieux fil mais je viens de jouer avec Swift 2.0 et Playgrounds et je suis tombé sur le même problème que je pensais partager une solution qui utilise l'énumération () méthode pour une chaîne

// 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
}

J'espère que cela t'aides

Merci Kai

0
Kai Windle