我正在制作我的第一个 swift 结构,一个堆栈:
struct stack {
var Innerarray = [Double]()
var pointer=0
mutating func push(val: Double) -> Double {
self.Innerarray.append( (val))
pointer+=1
return val
}
mutating func pop() -> Double {
return Innerarray[self.pointer]
}
init() {
self.push(0)
}
}
当一个做:
var test = stack()
test.push(1)
它有效。但是当我这样做时:
test.pop()
我收到一条相当神秘的错误消息:
执行中断,原因:EXC_BAD_INTRUCTION(代码=EXC_1386_INVOP,子代码=0x0)
你的数组索引超出了范围。 在使用它来索引内部数组之前,您需要递减pointer
。
mutating func pop() -> Double {
pointer -= 1
return Innerarray[self.pointer]
}
您还应该考虑当数组为空时该怎么做。 也许pop
应该返回一个Double?
,如果堆栈为空,则返回nil
。
您还应该从内部数组中删除最后一个元素,否则下一个push
将无法正常工作。 数组方法removeLast()
可以派上用场,因为它从数组中删除最后一项并返回它。
如果出于某种原因确实必须手动使用指针,那么在返回指针时应该得到减一(或将初始指针设置为 -1),因为数组索引从零开始。
return Innerarray[self.pointer - 1]
实际上,您可以使用 .last 返回最后一个元素,而不是使用手动指针:
return Innerarray.last!