使用迭代器而不是Swift中的位置访问数组的元素

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)

有什么建议 ?

Pat*_*ard 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!
}
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)