removeAtIndex 与 didSet

removeAtIndex with didSet

我们有一个 class 数组 属性 有一个 didSet 观察者。但是,似乎当我们在这个数组上调用 removeAtIndex 时,调用了 didSet 观察者。有什么办法可以阻止这种情况发生吗?

var items: [String] = []
{
    didSet
    {
        println(self.items.count)
    }
}
...
func removeIndex(index: Int)
{
    self.items.removeAtIndex(index)
    // now didSet is called, but we don't want that
}

didSet方法会被自动调用,如果你不想执行didSet方法中的代码行,下面的技巧可能对你有用。

  1. Bool 变量,在 willSet 观察者方法中将其设置为真,在 didSet 方法中检查此 bool 变量的状态,如果为真则忽略,并立即将其设置为假。

  2. 在 didSet 观察者方法中,您将获取数组的旧值并找到计数,并与当前计数进行比较。

非常出乎意料。

就我而言,我能够维护一个我推进的索引变量,而不是将项目从数组中拉出。