当我按下按钮的次数超过我的数组列表中的比萨饼时出现Swift错误

时间:2017-09-25 14:51:57

标签: swift

所以我刚刚开始编程,现在我收到了这个错误。

每次按下按钮的次数都会超过列表中的Pizzas。

完整错误代码:Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

到目前为止,这是我的代码:

    import UIKit

var pizzaNumber = 0
var pizzaNames = ["Skinke Pizza", "Salat Pizza", "Pepperoni Pizza"]
let priser = [65,70,65]
var totalProdukt = pizzaNames.count

class ViewController: UIViewController {

    @IBOutlet weak var produktNavn: UILabel!

    @IBAction func rightButton(_ sender: UIButton) {
        pizzaNumber+=1

        showPizza()
    }

    @IBAction func leftButton(_ sender: UIButton) {
        pizzaNumber-=1
        if pizzaNumber < 0 {
            pizzaNumber = 0
        }

        showPizza()
    }

    func showPizza() {

        if pizzaNumber > totalProdukt {
            pizzaNumber = pizzaNames.count
        } else {
            self.produktNavn.text = pizzaNames[pizzaNumber]
        }

    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

2 个答案:

答案 0 :(得分:1)

您应该确保pizzaNumber-1永远不会大于数组中元素的数量,以确保您永远不会尝试访问不存在的索引。通过将totalProdukt更改为计算变量,可以轻松完成此操作。这样,当您尝试访问变量时,变量的值将始终更新。

var totalProdukt: Int {
    return pizzaNames.count
}

还要记住,数组索引从0开始,所以你需要

if pizzaNumber >= totalProdukt {
    pizzaNumber = pizzaNames.count-1
} else {
    self.produktNavn.text = pizzaNames[pizzaNumber]
} 

请记住,使用当前代码,不需要将数组的计数存储在单独的变量中,因为您只在代码中的某个位置使用它。

此外,最干净的解决方案是在实际增加它之前检查值,而不是在使用它时,这种方式showPizzas你不需要做任何检查,只需更新标签:

class ViewController: UIViewController {

    @IBOutlet weak var produktNavn: UILabel!

    @IBAction func rightButton(_ sender: UIButton) {
        if pizzaNumber < pizzas.count-1 {
            pizzaNumber+=1
        }
        showPizza()
    }

    @IBAction func leftButton(_ sender: UIButton) {
        if pizzaNumber > 0 {
            pizzaNumber-=1 
        }
        showPizza()
    }

    func showPizza() {
        self.produktNavn.text = pizzaNames[pizzaNumber]
    }

}

答案 1 :(得分:0)

以下是如何修复错误

func showPizza() {

    if pizzaNumber >= totalProdukt { // << Added '=' since pizzaNames[pizzaNames.count] is out of bounds
        pizzaNumber = pizzaNames.count - 1
    } else {
        self.produktNavn.text = pizzaNames[pizzaNumber]
    }
}