大家好,我是学习Swift的初学者。在我的程序中,我有一个包含49个项目的数组,我想通过滑动动作(从左到右和从右到左)在屏幕上逐个标签地打印出每个项目。但是,当我到达数组末尾时,由于超出数组索引范围,我得到了fatal error

我尝试使用计数器变量来计算滑动次数,并在达到49时将其索引号设置为0,但它不起作用。我该如何应对?谢谢。

if swipeCounter == 49{
    swipeCounter = 0
}


firstCell.text = String(numberList[swipeCounter])
secondCell.text = String(numberList[swipeCounter + 1])
thirdCell.text = String(numberList[swipeCounter + 2])

swipeCounter = ++swipeCounter

println(swipeCounter)

最佳答案

由于正在检查swipeCounter的值,然后增加它的值,因此可能发生该错误。因此,即使swipeCounter为48,也不会将其设置为0,并且尝试访问swipeCounter + 2即50将导致崩溃。另外,我并不是真的不喜欢在代码中使用硬编码长度。

我建议这样做

firstCell.text = String(numberList[swipeCounter % numberList.count])
secondCell.text = String(numberList[(swipeCounter + 1) % numberList.count])
thirdCell.text = String(numberList[(swipeCounter + 2) % numberList.count])


模运算符应该只处理任何索引溢出,并且如果数组长度发生变化,用numberList.count替换49也将是一个不错的选择。

希望这可以帮助!

10-02 21:14