我的变量不会超过 8

  • 本文关键字:变量 ios swift
  • 更新时间 :
  • 英文 :


我有一个带有按钮的应用程序,每次按下它时,变量都会添加 1。然后由变量设置标签。但是当标签达到 8 时,您再次按下按钮时,它会崩溃并显示fatal error: Index out of range

这是我的代码:

import UIKit
class ViewController: UIViewController {
// OUTLETS
@IBOutlet weak var score: UILabel!
@IBAction func add(_ sender: Any) {
    add()
}

// VARIABLES
var scoreVar = 0
let levelUpAt = [50, 100, 500, 1000, 5000, 10000, 50000, 100000]
var currentLevel = 1
var toAdd = 1
// OVERRIDES
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.
}
// FUNCTIONS
// Below code adds to the score
func add() {
    scoreVar += 1 // Adds 1 to scoreVar
    score.text = "(scoreVar)"; // Updates text to match
    checkForLevelUp(); // Calls the function defined in the next few days ago
}
// Below code checks if the score meets the next level requirements
func checkForLevelUp() {
    if (scoreVar - 1 < levelUpAt[currentLevel - 1]) { // Complicated math-y if statment
        currentLevel += 1
        toAdd += 1
    }
}
}

在这里: if levelUpAt[currentLevel - 1]您正在访问数组元素。您的数组中只有 8 个元素。一旦currentLevel达到 8,它将访问数组不持有的元素,因此它会崩溃。

数组中只有 8 个元素。

let levelUpAt = [50, 100, 500, 1000, 5000, 10000, 50000, 100000]

currentLevel = 9,你打电话给checkForLevelUp(),它现在已经超出了范围。

我根本不知道 swift,但您正在 checkForLevelUp 的 8 个项目的数组中查找一个值。

在查看数组之前,您应该添加检查您是否在数组的范围内。

那是因为你的变量是 8,数组的最后一个索引是 7,这就是你得到fatal error: Index out of range的方式。

改为这样做你的if-statement

if (scoreVar - 1 < levelUpAt[currentLevel - 1] && levelUpAt.indices.contains(currentLevel)) { ... }

所以你基本上检查你的数组中是否存在该索引:

levelUpAt.indices.contains(currentLevel)

相关内容

  • 没有找到相关文章

最新更新