Swift - 在函数外部声明变量时导致无限循环

Swift - causing an infinite loop while declaring a variable outside the function

我最近开始学习 Swift,这是我的第一门编码语言。我在函数外部声明变量时遇到了困难,仍然无法弄清楚为什么会导致死循环。

func addItem(item: Int) {
        box.append(item)
    }
var topItem: Int?
func pickUpItem() -> Int? {
//    var topItem: Int?
    guard box.count > 0 else {
        return topItem
    }
    topItem = box[box.count - 1]
    box.remove(at: box.count - 1)
    return topItem
}
var box: [Int] = []
addItem(item: 667)
addItem(item: 651)
addItem(item: 604)
while let num = pickUpItem() {
    print(num)
}

但是,如果我在函数内声明变量,一切都很好。为什么会这样?

func addItem(item: Int) {
        box.append(item)
    }
//var topItem: Int?
func pickUpItem() -> Int? {
    var topItem: Int?
    guard box.count > 0 else {
        return topItem
    }
    topItem = box[box.count - 1]
    box.remove(at: box.count - 1)
    return topItem
}
var box: [Int] = []
addItem(item: 667)
addItem(item: 651)
addItem(item: 604)
while let num = pickUpItem() {
    print(num)
}

当它在函数外部时,它从第一组元素中获取一个值,因此当数组为空时它永远不会为 nil 因此无限循环,而在函数内部它的值根据当前数组元素决定

在函数开始的时候这样重置在外面是可以正常工作的

var topItem: Int?
func pickUpItem() -> Int? {
  topItem = nil
  ....
}

guard box.count > 0 else {
    return nil
}