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
}
我最近开始学习 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
}