2015-06-10 111 views
44

我想在Swift游乐场做一个非常简单的代码片段。迭代通过字符串斯威夫特2.0

var word = "Zebra" 

for i in word { 
    print(i) 
} 

但是,我总是在线的错误3.

“串”没有一个名为为什么这不“发电机”

任何想法成员工作?注:我在Xcode 7个,与雨燕2.0(Strings and Characters).

回答

77

随着斯威夫特2,String的不符合SequenceType但是,您可以使用characters财产上Stringcharacters返回String.CharacterView这符合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) 
} 

虽然,我相信苹果有一个理由去除String的符合SequenceType,所以第一个选项似乎是更好的选择。探索什么是可能的,但很有趣。

+0

为什么字符串不符合序列类型的原因是,相同的字符串可以通过元件的多于一个的序列来表示。 – user3441734

9

String不再符合SequenceType了。然而,你可以访问它的属性characters这样:

var word = "Zebra" 

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

注意,文件尚未更新。

+0

感谢这帮助我,当我无法弄清楚如何使用字符串上的'reverse'。对于string.characters.reverse(){...}'中的char必须是' – pbush25

2

夫特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) })