通过String Swift 2.0迭代

时间:2015-06-10 21:26:43

标签: swift swift-playground swift2 xcode7

我试图在Swift游乐场中做一个非常简单的代码。

var word = "Zebra"

for i in word {
  print(i)
}

但是,我总是在第3行收到错误。

  

'String'没有名为'Generator'的成员

关于为什么这不起作用的任何想法?注意:我使用Swift 2.0(Strings and Characters).

在Xcode 7中工作

4 个答案:

答案 0 :(得分:78)

自Swift 2起,String不符合SequenceType。但是,您可以使用characters上的String属性。 characters返回符合SequenceType的{​​{3}},因此可以使用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的一致性,因此第一个选项似乎是更好的选择。探索可能的事情很有意思。

答案 1 :(得分:9)

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

var word = "Zebra"

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

请注意,文档尚未更新。

答案 2 :(得分:2)

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

答案 3 :(得分:2)

Swift 4

Forin 循环:

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

地图 示例:

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

forEach 示例:

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