我想知道Swift中是否有数组的迭代器,比如CPP,它允许避免使用 position 来访问数组的下一个元素。
实际上,我在数组中使用 position + 1 来访问它的下一个元素:
var array = ["a", "b", "c", "d"]
func arrayToString(success : String -> Void)
{
var str = String()
var myFunc : (Int -> Void)!
myFunc = {
if $0 < array.count
{
str += array[$0]
myFunc($0 + 1)
}
else
{
success(str)
}
}
myFunc(0)
}
arrayToString({
println($0)
})
我正在寻找可以使用的解决方案:
var array = ["a", "b", "c", "d"]
func arrayToString(success : String -> Void)
{
var str = String()
var myFunc : (Iterator -> Void)!
myFunc = {
if $0 != nil
{
str += array[$0]
myFunc($0.next)
}
else
{
success(str)
}
}
myFunc(array.first)
}
arrayToString({
println($0)
})
有什么建议吗?
答案 0 :(得分:9)
你想要的是使用发电机:
var array = ["a", "b", "c", "d"]
var g = array.generate()
var str = String()
for (var i = g.next(); i != nil; i = g.next()) {
str += i!
}
当您想要解析命令行参数时,这非常方便:
var args = Process.arguments.generate()
while let arg = args.next() {
if (arg == "--output") {
let output = args.next()!
...
}
}
在Swift 3中,现在变为:
var args = Process.arguments.makeIterator()
while let arg = args.next() {
if (arg == "--output") {
let output = args.next()!
...
}
}
答案 1 :(得分:2)
- 我可以想到可以在这里实施的工作,以及map
的{{1}} 功能的使用。< / p>
对每个元素进行迭代:
Array
<强>输出:强>
2 3 4 5 6
- 因此,通过这种方式,您可以对let arr = [1, 2, 3, 4, 5]
arr.map { a in print("\(a + 1) ") }
中Array
的每个元素实现迭代。