【问题标题】:Create a function to iterate and cycle through an array in Swift在 Swift 中创建一个函数来迭代和循环遍历数组
【发布时间】:2015-04-04 11:52:42
【问题描述】:

我正在尝试在 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])"
    }
}

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

提前感谢您的帮助!

【问题讨论】:

  • 你只是想获取当前索引的字符串吗?
  • 我认为你应该解释你想要达到的目标。我不知道您要做什么,但请注意,您在 while 循环之外增加索引,这是您想要的吗?而且你从来没有重置索引,它是否也期望到最后一个元素并留在那里?
  • 嗨,对不起——我才刚学几天编程,这是我的第一篇文章!我会用更多的上下文更新我的问题

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


【解决方案1】:

我不在一台可以启动 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])"
    }

【讨论】:

  • 郑重声明,这不是一个好方法。具有副作用的全局变量和函数通常是一件坏事。但是,如果没有其余代码的上下文,很难找到更好的解决方案。
  • 谢谢韦恩,这看起来就快到了。这似乎很好地遍历了数组,但是一旦你调用它 5 次(数组计数),它就会返回数组中的第一个值。我想做的是让它继续循环遍历数组。
  • 目标字符串“12345”是什么??
  • 我添加了代码,通过重置索引使其继续循环。
  • @WayneTanner 太棒了,谢谢 - 似乎工作得很好!
【解决方案2】:

获得此计数的另一种选择,无需迭代,是做

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多