我正在尝试在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])"
}
}
我想要这样做的是每次调用它时循环遍历数组,一旦它到达数组的末尾再次从数组的开头循环开始。
提前感谢您的帮助!
答案 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])"
}