45

我正在尝试在 Swift 游乐场中编写一段非常简单的代码。

var word = "Zebra"

for i in word {
  print(i)
}

但是,我总是在第 3 行得到一个错误。

“字符串”没有名为“生成器”的成员

关于为什么这不起作用的任何想法?注意:我在 Xcode 7 中工作,使用 Swift 2.0(字符串和字符)。

4

4 回答 4

78

从 Swift 2 开始,String不符合SequenceType. 但是,您可以在characters上使用该属性Stringcharacters返回String.CharacterView符合的 a ,SequenceType因此可以通过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 有理由删除String' 的一致性SequenceType,因此第一个选项似乎是更好的选择。探索什么是可能的很有趣。

于 2015-06-10T21:31:07.277 回答
9

String不再符合SequenceType。但是,您可以通过characters以下方式访问它的属性:

var word = "Zebra"

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

请注意,文档尚未更新。

于 2015-06-10T21:33:31.653 回答
3

斯威夫特 4

Forin循环:

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

地图示例:

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

对于每个示例:

let word = "Swift 4"
word.forEach({ print($0) })
于 2017-06-06T09:22:44.660 回答
2

斯威夫特 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

于 2017-01-18T20:14:20.310 回答