Arrays 创建一个函数,在Swift中循环遍历数组

Arrays 创建一个函数,在Swift中循环遍历数组,arrays,function,swift,if-statement,while-loop,Arrays,Function,Swift,If Statement,While Loop,我试图在Xcode中创建一个函数,每次点击按钮时可以调用该函数,以按顺序遍历数组,然后更新按钮标题的值 我似乎无法应付这个挑战。我已经尝试了while循环和if语句的各种迭代,但每次运行它时,我都会直接返回数组中的最后一个值。下面是我目前得到的代码,我试图添加一个break子句来阻止函数自动遍历整个数组,但它现在抛出一条错误消息,表示return语句之后的代码将永远不会执行: 因此,我在viewController中创建了一个按钮实例,如下所示: @IBAction func repCount(

我试图在Xcode中创建一个函数,每次点击按钮时可以调用该函数,以按顺序遍历数组,然后更新按钮标题的值

我似乎无法应付这个挑战。我已经尝试了while循环和if语句的各种迭代,但每次运行它时,我都会直接返回数组中的最后一个值。下面是我目前得到的代码,我试图添加一个break子句来阻止函数自动遍历整个数组,但它现在抛出一条错误消息,表示return语句之后的代码将永远不会执行:

因此,我在viewController中创建了一个按钮实例,如下所示:

@IBAction func repCount() {
    repCountButton.setTitle("\(repCounter.repCount())", forState: UIControlState.Normal)
var repArray = [1,2,3,4,5]
var repArrayIndex: Int = 0

func repCount () -> String {
    if repArrayIndex < repArray.count {
        while repArrayIndex < repArray.count {
            return "\(repArray[repArrayIndex])"
            break
        }
        repArrayIndex++
    } else {
        return "\(repArray[0])"
    }
}
我希望这将更新按钮的标题,并使用每次按下按钮时调用的repCount函数返回的内容

我在一个名为repCounter的单独Swift文件中设置了该函数,我的repCount函数代码如下:

@IBAction func repCount() {
    repCountButton.setTitle("\(repCounter.repCount())", forState: UIControlState.Normal)
var repArray = [1,2,3,4,5]
var repArrayIndex: Int = 0

func repCount () -> String {
    if repArrayIndex < repArray.count {
        while repArrayIndex < repArray.count {
            return "\(repArray[repArrayIndex])"
            break
        }
        repArrayIndex++
    } else {
        return "\(repArray[0])"
    }
}
var repArray=[1,2,3,4,5]
var repArrayIndex:Int=0
func repCount()->String{
如果repArray索引
我希望这样做的是,每次调用数组时循环遍历它,一旦它到达数组的末尾,就再次从数组的开头开始循环


提前感谢您的帮助

我不是在一台可以启动XCode进行测试的计算机上,但我认为下面的版本可以满足您的要求。这不是最优雅的代码,但它非常简单。您必须在return语句之前执行所有索引杂耍,因为一旦代码命中return,后面的任何内容都不会执行

我添加了一些代码,以便在索引到达数组末尾时重置索引

    var repArray = [1,2,3,4,5]
    var repArrayIndex: Int = 0

    func repCount () -> String {
        while repArrayIndex < repArray.count {
            var curIndex = repArrayIndex
            repArrayIndex = repArrayIndex + 1;
            if repArrayIndex >= repArray.count {
               repArrayIndex = 0
            }
            return "\(repArray[curIndex])"
        }
        return "\(repArray[0])"
    }
var repArray=[1,2,3,4,5]
var repArrayIndex:Int=0
func repCount()->String{
而repArrayIndex=repArray.count{
repArrayIndex=0
}
返回“\(重新排列[curIndex])”
}
返回“\(重新排列[0])”
}

获取此计数的另一个选项(无需迭代)是

// From Swift 1.2
func repCount () -> String {
    return count(repArray)
}

// Before Swift 1.2
func repCount () -> String {
    return countElements(repArray)
}
如果您坚持迭代,则有多个选项,请参阅,其中一个选项可能是:

var count = 0
for rep in repArray {
   count++
}

或者你也可以在另一个答案中提供往返迭代,但是当你不需要的时候,为什么要这么做呢?或者您有什么没有告诉我们的?

您只是想为当前索引获取一个字符串吗?我想您应该解释一下您想要实现的目标。我不知道您想做什么,但是请注意,您正在while循环之外增加索引,这就是您想要的吗?你从来没有重置过索引,它是否也会转到最后一个元素并停留在那里?嗨,对不起-我只学了几天编程,这是我的第一篇帖子!我将用更多的上下文更新我的问题,这不是一个好方法。具有副作用的全局变量和函数通常是一件坏事。但是,如果没有代码其余部分的上下文,就很难找到更好的解决方案。谢谢Wayne,这看起来就快到了。这似乎可以很好地遍历数组,但一旦调用了5次(数组计数),它就会返回数组中的第一个值。我想做的是让它继续在数组中循环。目标字符串“12345”是什么?我添加了代码,通过重置索引使它继续循环。@WayneTanner这太棒了,谢谢你-似乎工作得很好!