我创建了这个单例来访问整个应用程序中的共享数组:
class TranslationItems {
var delegate: TranslationItemsDelegate?
static let shared = TranslationItems()
var array = [Translation]() {
didSet {
delegate?.newItemAdded()
}
}
}
问题是这允许重复(数组可能包含多个具有相同 hashValue 的项目)。如果我检查didSet
setter 中的重复,然后在那里更改数组(例如通过执行array = Array(Set(array))
),这会导致无限循环。
如何删除班级中的重复项?
如果你想避免重复,为什么不使用 Set 呢(Translation
必须符合Hashable
)?
var set = Set<Translation>()
但是,如果您想保留数组,更有效的方法是添加一个add
过滤重复项的方法,Translation
必须符合Equatable
func add(object: Translation) {
if !array.contains(object) {
array.append(object)
delegate?.newItemAdded()
}
}
Set
从制作一个Array
然后将其转换回Array
是不必要的昂贵。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句