创建一个函数来迭代和循环 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++
}
或者您可以进行其他答案中提供的往返迭代,但为什么在不需要时采用困难的方式呢?或者你有什么没告诉我们的?
我正在尝试在 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++
}
或者您可以进行其他答案中提供的往返迭代,但为什么在不需要时采用困难的方式呢?或者你有什么没告诉我们的?