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

时间:2015-02-04 19:51:19

标签: arrays function swift if-statement while-loop

我正在尝试在Xcode中创建一个函数,每当我按下一个按钮按顺序迭代一个数组然后更新按钮标题的值时,我就可以调用它。

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

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

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

我希望这会使用每次按下按钮时调用的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])"
    }
}

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

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

在没有迭代的情况下获得此计数的另一个选择是

// 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++
}

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

答案 1 :(得分:0)

我不是在计算机上我可以拉XCode来测试它,但我认为下面的版本会做你想要的。它不是最优雅的代码,但它非常简单。你必须在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])"
    }