在初始化UITableViewCell时总是调用didSet

时间:2017-09-27 16:09:31

标签: ios uitableview observers didset

我有一个自定义的UITableViewCell,其中包含以下内容:

  • 一个名为quantityCount的计算属性didSet
  • 阵列。

didSet有一个条件,如果当前quantityCount > oldValue,我会增加附加到我的数组。
如果oldValue > quantityCount我将删除数组的最后一个元素。

以下是一个例子:

private var quantityCount = 1 {
    didSet {
        if quantityCount > oldValue {
            self.myArray?.append(quantityCount)
        } else if oldValue > quantityCount {
            customizationContainers?.removeLast()
        }
    }
}

现在,用户可以根据需要多次打开拥有此单元格的UITableView。这会导致我的问题,因为当单元格初始化时,oldValue == 1使第一个条件成立,myArray增加1。

所以我的问题是:
当单元格初始化时,我不想让didSet被调用。如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

从我的角度来看,你有几个问题。第一个问题是你使用didSet为你的quantityCount做了太多的魔术。如果只是完全删除了didSet实现,那么您的代码会更简单,更容易理解,而是调用一个函数来追加和删除myArray中的值。想想这样,另一个开发人员设置quantityCount就不知道他们只是通过更新基元int的值来改变数组。

另一个问题是你的didSet实现中的if条件。在我看来,它们很难理解

我至少会将你的didSet中的条件更改为以下内容,它可以帮助你调试和解决你想要解决的当前问题:

    if quantityCount == oldValue {
        return
    }

    if quantityCount > oldValue {
        //do something because quantityCount is greater than oldValue
    } else {
        //do something here because quantityCount is less than but not equal oldValue
    }