我正在制作我的第一个快速结构,一个堆栈:
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)
答案 0 :(得分:2)
您的数组索引超出范围。在使用它来索引内部数组之前,需要递减pointer
。
mutating func pop() -> Double {
pointer -= 1
return Innerarray[self.pointer]
}
您还应该考虑在数组为空时要执行的操作。如果堆栈为空,pop
可能会返回Double?
并返回nil
。
您还应该删除内部数组中的最后一个元素,或者您的下一个push
无法正常工作。数组方法removeLast()
可以派上用场,因为它从数组中删除最后一项并返回它。
答案 1 :(得分:0)
如果由于某种原因你真的必须手动使用指针,那么当你返回它时应该得到减1(或者将初始指针设置为-1),因为数组索引从零开始。
return Innerarray[self.pointer - 1]
实际上,您可以使用.last返回最后一个元素,而不是使用手动指针:
return Innerarray.last!