创建一个函数来迭代和循环 Swift 中的数组

Create a function to iterate and cycle through an array in Swift

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

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

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

@IBAction func repCount() {
    repCountButton.setTitle("\(repCounter.repCount())", forState: UIControlState.Normal)

我希望这会用我 return 每次按下按钮时调用的 repCount 函数更新按钮的标题。

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

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])"
    }
}

我想要做的是在每次调用数组时循环遍历数组,一旦到达数组末尾就再次从数组开头开始循环。

在此先感谢您的帮助!

我不在可以打开 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])"
    }

无需迭代即可获得此计数的另一种方法是

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

// Before Swift 1.2
func repCount () -> String {
    return countElements(repArray)
}

如果您坚持迭代,有多个选项,请参阅 Iterating over an array,其中一个可能是:

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

或者您可以进行其他答案中提供的往返迭代,但为什么在不需要时采用困难的方式呢?或者你有什么没告诉我们的?