如果我再次单击同一个按钮,我将尝试撤消过滤结果。我的目标是过滤一个数组并检查一个单词是否有多个字符,以及一些其他过滤器。问题是,一旦我过滤了那个数组,有没有办法返回并将 filteredArray 恢复到它以前的情况?
这是我当前的代码
Class FilterClas {
var filteredArray = [InfoObject]()
var isChecked = false
@IBAction func filterArray(_ sender: Any) {
if !isChecked {
isChecked = true
filteredArray = filteredArray.filter({ m in m.firstImg.characters.count < 160})
print(filteredArray)
}
} else {
isChecked = false
// What do I do here to revert the changes I made to the array.
}
}
}
如果有人需要更多说明,请告诉我。
最佳答案
只是为了使其他一些答案和评论具体化,您可以跟踪您的过滤器并根据需要应用它们。例如:
class Filter {
var array: [Int] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var filters: [(Int) -> Bool] = []
var filteredArray: [Int] {
var filteredArray = array
for filter in filters {
filteredArray = filteredArray.filter(filter)
}
return filteredArray
}
}
let f = Filter()
f.filteredArray
f.filters.append { $0 < 8 }
f.filteredArray
f.filters.append { $0 % 2 == 0 }
f.filteredArray
f.filters.append { $0 > 2 }
f.filteredArray
或者,如果您希望能够打开和关闭单个过滤器,您可以这样做:
struct Filter {
let filter: (Int) -> Bool
var enabled: Bool
}
class Filtered {
var array: [Int] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var filters: [Filter] = [
Filter(filter: { $0 < 8 }, enabled: true),
Filter(filter: { $0 % 2 == 0 }, enabled: false),
Filter(filter: { $0 > 2 }, enabled: true),
]
var filteredArray: [Int] {
var filteredArray = array
for filter in filters {
if filter.enabled {
filteredArray = filteredArray.filter(filter.filter)
}
}
return filteredArray
}
}
let f = Filtered()
f.filteredArray
f.filters[1].enabled = true
f.filteredArray
关于ios - 如果我再次单击同一个按钮,我将尝试撤消筛选结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42126328/