0

我有一个自定义 UITableViewCell 具有以下内容:

  • 用 调用的计算quantityCount属性didSet
  • 大批。

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

这是一个例子:

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

现在,用户可以根据需要多次打开拥有此单元格的 UITableView。这给我带来了一个问题,因为当单元格被初始化时,oldValue == 1这使得第一个条件为真并且myArray增加了一个。

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

4

1 回答 1

0

从我的角度来看,你有几个问题。第一个问题是你对你的数量计数的 didSet 做了太多的魔法。如果只是完全删除了 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
    }
于 2017-09-27T16:40:29.987 回答