【发布时间】:2016-04-19 20:26:25
【问题描述】:
我使用以下类来管理图像幻灯片列表并跟踪活动幻灯片:
class Slides
{
var list: [String] = []
var activeIndex: Int = 0
{
didSet
{
if activeIndex < 0
{
activeIndex = list.count - 1
}
else
if activeIndex > list.count
{
activeIndex = 0
}
}
}
var active: String
{
get
{
return list[activeIndex]
}
}
func next() -> Int
{
return activeIndex++
}
func prev() -> Int
{
return activeIndex--
}
}
函数prev() 和next() 以循环方式给我上一张或下一张幻灯片 - 环绕到幻灯片列表的开头或结尾。
我正在使用activeIndex 属性观察器来防止设置无效索引。
在应用程序中,我使用滑动手势来显示下一张或上一张幻灯片。
@IBAction func onSwipeLeft(sender: AnyObject)
{
slides.next()
let slide = slides.active
...
}
@IBAction func onSwipeRight(sender: AnyObject)
{
slides.prev()
let slide = slides.active
...
}
它在大多数情况下运行良好,但偶尔来回滑动会在 active 属性 getter 中触发 array index out of range 异常。这意味着手势事件会中断并在将实际值设置为 activeIndex 和调用其观察者以防止 activeIndex 存储无效值之间执行代码。
问题是为什么会发生这种情况,解决方案是什么?
【问题讨论】: