ios - 手势事件干扰属性观察器捕获处于无效状态的属性

标签 ios swift swift2

我使用以下类来管理图像幻灯片列表并跟踪事件幻灯片:

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/

相关文章:

ios - 在 Swift 中制作一个指南针应用程序 iOS

ios - 无法使用 String 类型的索引下标 NSDictionary 类型的值。从 Swift 2.3 -> 3.2 转换时

ios - [NSTaggedPointerString objectAtIndex :]: unrecognized selector sent to instance

ios - 通过数据库搜索值

iphone - 关闭两个模态(表) View Controller

iphone - 添加到 ALAssetGroup 时 ALAsset 的自定义文件名

由于信号 : illegal instruction 4,Xcode 7 命令失败

ios - 访问 Realms 对象列表时出错 : Realm accessed from incorrect thread

ios - 有没有办法在组件加载之后但显示之前设置单元格的高度?

ios - 如何使 TableCell UIImageView 具有相同的宽度但高度取决于图像?