web-dev-qa-db-ja.com

文字列を反復処理Swift 2.0

Swift playgrounds。)で非常に単純なコードを実行しようとしています。

var Word = "Zebra"

for i in Word {
  print(i)
}

ただし、3行目に常にエラーが表示されます。

「String」には「Generator」という名前のメンバーがありません

これが機能しない理由についてのアイデアはありますか?注:私はXcode 7で、Swift 2.0( Strings and Characters)。

45
Aaron

Swift 2、現在、StringSequenceTypeに適合していません。ただし、charactersプロパティでStringプロパティを使用できます] _。charactersString.CharacterViewSequenceTypeに準拠しているため、forループで繰り返し処理できます。

let Word = "Zebra"

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

または、Stringに拡張子を追加して、SequenceTypeに準拠させることもできます。

extension String: SequenceType {}

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

ただし、AppleにはStringSequenceTypeへの適合性を削除する理由があったので、最初のオプションがより良い選択のように思われます。しかし何が可能です。

78
ABakerSmith

StringSequenceTypeに準拠しなくなりました。ただし、次の方法でcharactersプロパティにアクセスできます。

var Word = "Zebra"

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

ドキュメントはまだ更新されていないことに注意してください。

9
lchamp

スイフト4

Forinループ:

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

map例:

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

forEach例:

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

Swift 3.0.1

indicesプロパティのcharactersプロパティを使用して、文字列内の個々の文字のすべてのindicesにアクセスします。

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

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

2
Hamed