Jea*_*ent 8 arrays iteration iterator swift
我想知道在Swift中是否存在数组的迭代器,就像在CPP中一样,它允许避免使用位置来访问数组的下一个元素.
实际上,我在数组中使用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)
})
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个可用的解决方案:
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)
})
Run Code Online (Sandbox Code Playgroud)
有什么建议 ?
你想要的是使用一个发电机:
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!
}
Run Code Online (Sandbox Code Playgroud)
当您想要解析命令行参数时,这非常方便:
var args = Process.arguments.generate()
while let arg = args.next() {
if (arg == "--output") {
let output = args.next()!
...
}
}
Run Code Online (Sandbox Code Playgroud)
在Swift 3中,现在变为:
var args = Process.arguments.makeIterator()
while let arg = args.next() {
if (arg == "--output") {
let output = args.next()!
...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2832 次 |
| 最近记录: |