我有一个自定义的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
被调用。如何解决这个问题?
答案 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
}