【问题标题】:Fatal Error: Array Index out of range in Swift Xcode6致命错误:Swift Xcode6 中的数组索引超出范围
【发布时间】:2015-02-18 00:59:18
【问题描述】:

我的函数中不断收到此错误

我正在尝试读取数组 answerRecord 中的值。我使用了一个全局变量 arrayCount,它跟踪我当前指向的索引。

func buttonColourControl(){
    switch answerRecord[arrayCount]{
    case1: xxxxxxx

我在之前的 func 中做了一个 println,它为 var arrayCount 返回了一个 int 1 的值 因此 arrayCount 不为空。所以它应该能够将数组解释为:

*假设 arrayCount 现在是 1 answerRecord[arrayCount] 应该被解释为 answerRecord[1] 如有错误请指正

@IBAction func nextButtonClicked(sender: UIButton) {
    arrayCount = ++arrayCount
    question.text = spouseQuesion[arrayCount]
    controlBackNextButton()
    answer1Label.text = spouseAnswer1[arrayCount]
    answer2Label.text = spouseAnswer2[arrayCount]
    answer3Label.text = spouseAnswer3[arrayCount]
    println(arrayCount)
    buttonColourControl()
}

【问题讨论】:

  • 错误发生在哪一行?
  • 在 func buttonColourControl() 内的 switch 语句中
  • 所以,这个错误意味着当你说answerRecord[arrayCount]时,arrayCount的值不对应answerRecord的任何索引号。您不能在这里只使用任何值。它必须介于 0 和数组大小之间。数组本身的计数太大了。
  • arrayCount的值从何而来? answerRecord 中的实际内容是什么?
  • 嗨,马特,我知道我的错误在哪里。感谢您的清晰解释。在将值附加到其中之前,我阅读了下一个元素。现在我想做一个 IF 语句来检查 arrayRecord[arrayCount] 是否为空,但我得到了另一个错误。 if answerRecord[arrayCount] != nil -> 这是什么意思?

标签: swift xcode6.1


【解决方案1】:

假设您有一个包含一个对象的数组:

let arr = ["hello"]

该数组的唯一有效索引是 0。arr[0] 是合法的。 arr[1] 不是。该数组有 1 个元素,但其索引号为 0。

这适用于任何数组。每个数组都包含一些元素。它可能是 0 个元素,在这种情况下 no 索引是合法的。它可能是 3 个元素,在这种情况下,您可以通过索引号 0、1 和 2 来引用数组的元素。依此类推。就这样。这些是规则。不能使用任何其他索引号,否则会崩溃。

所以错误信息只是告诉你你犯了那个错误。你有一个数组answerRecord,它有一些元素——我不知道有多少,没关系。然后您使用表达式answerRecord[arrayCount] 并且arrayCount 的值超出了我刚刚解释的范围。这就是你需要知道的。错误消息告诉您程序中的错误。现在你可以修复它了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多