代码之家  ›  专栏  ›  技术社区  ›  B.Toaster

Swift中的索引超出范围错误

  •  0
  • B.Toaster  · 技术社区  · 7 年前
    var numberOfPeople = 1 //get from host
    var numberAtCounter = 0
    func showNames() {
    
        if peopleInMatch[numberAtCounter] == yourPeerID { //change to peopleinmatcheveryone
    
            if numberOfPeople == 0 {
                print("hoho")
                personName.isHidden = true
                connect.isHidden = false
                connect.setTitle("PRESS READY", for: UIControlState.normal)
                //change label to ready
            } else {
                numberAtCounter += 1
                numberOfPeople -= 1 // buggy?
                print("\(numberAtCounter)")
                showNames()
            }
    
    
        } else {
        personName.text = "TAKE PHOTO OF \(peopleInMatch[numberAtCounter])'s COLOR"
        numberAtCounter += 1
            if numberOfPeople <= 0 {
                personName.isHidden = true
                connect.isHidden = false
                connect.setTitle("PRESS READY", for: UIControlState.normal)
                //change label to ready
            }
        numberOfPeople -= 1 //buggy maybe fixed
    
        }
    }
    

    我在if peopleInMatch[numberAtCounter]==yourPeerID行上得到一个线程1:EXC\u断点错误。我不完全确定索引外是什么意思,也不确定有什么潜在的错误。代码将运行一次,然后函数调用自己,第二次在我上面提到的行中崩溃。我检查了所有的变量,没有一个是零。有什么想法吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   rmaddy    7 年前

    在这里,我举了一个简短的例子,让你们了解你们的问题实际上在哪里。

    屏幕截图1:

    enter image description here

    在第一次调用中,要么将值递减为 numberAtCounter-=1 取值范围为0到-1。因此,在第二次调用中,当函数在以下位置在线调用时:

    if peopleInMatch[numberAtCounter] == yourPeerID // here you need to check value of `numberAtCounter` 
    

    确保它没有得到负值或大于peopleInMatch数组的值。

    因此,如果它变为负值或大于count,结果将如下所示:

    enter image description here