我使用以下类来管理图像幻灯片列表并跟踪事件幻灯片:
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
存储无效值之间中断并执行代码。
问题是为什么首先会发生这种情况,解决方案是什么?
最佳答案
您的代码在这一行中存在错误:
if activeIndex > list.count
应该是:
if activeIndex >= list.count
关于ios - 手势事件干扰属性观察器捕获处于无效状态的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34790819/