web-dev-qa-db-fra.com

Itérer à travers une chaîne Swift 2.0

J'essaie de faire un morceau de code très simple dans les terrains de jeux Swift.

var Word = "Zebra"

for i in Word {
  print(i)
}

Cependant, je reçois toujours une erreur sur la ligne 3.

'String' n'a pas de membre nommé 'Generator'

Des idées sur pourquoi cela ne fonctionne pas? Remarque: je travaille dans Xcode 7, avec Swift 2.0 ( Chaînes et caractères).

45
Aaron

À partir de Swift 2, String n'est pas conforme à SequenceType. Cependant, vous pouvez utiliser la propriété characters sur String. characters renvoie un String.CharacterView qui est conforme à SequenceType et peut donc être itéré via une boucle for:

let Word = "Zebra"

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

Vous pouvez également ajouter une extension à String pour la rendre conforme à SequenceType:

extension String: SequenceType {}

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

Cependant, je suis sûr que Apple avait une raison pour supprimer la conformité de String à SequenceType et donc la première option semble être le meilleur choix. Il est intéressant d'explorer ce qui est possible cependant.

78
ABakerSmith

String n'est plus conforme à SequenceType. Cependant, vous pouvez accéder à la propriété characters de cette façon:

var Word = "Zebra"

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

Notez que la documentation n'a pas encore été mise à jour.

9
lchamp

Swift 4

( Forin boucle:

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

map exemple:

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

forEach exemple:

let Word = "Swift 4"
Word.forEach({ print($0) })
2
Robert

Swift 3.0.1

Utilisez la propriété indices de la propriété characters pour accéder à tous les indices des caractères individuels d'une chaîne.

let greeting = "Guten Tag!"
for index in greeting.characters.indices {
print("\(greeting[index]) ", terminator: "")
}
// Prints "G u t e n   T a g ! "

visitez https://developer.Apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/StringsAndCharacters.html

2
Hamed