如何使用等式创建扩展以删除自定义数组元素?



我已经创建了自定义数组类型。现在我想在其中再有一个方法,它可以通过将实际元素作为参数传递来删除数组的元素。 我知道如果我们将自定义数组的扩展添加为公平,则可以实现这一点。

以下是我的代理数组代码:

struct ArrayProxy<T> {
var array: [T] = []
mutating func append(newElement: T) {
self.array.append(newElement)
print("Element added in download queue")
DownloadContent.downloadChaptersFromDownloadQueue()
}
mutating func removeAtIndex(index: Int) {
print("Removed object (self.array[index]) at index (index)")
self.array.remove(at: index)
}
subscript(index: Int) -> T {
set {
print("Set object from (self.array[index]) to (newValue) at index (index)")
self.array[index] = newValue
}
get {
return self.array[index]
}
}
}

下面是我对代理数组的扩展

extension ArrayProxy where T: Equatable {
mutating func removeElement(element: T) {
self.removeAtIndex(index: self.array.index(of: element)!)
}
}

强制解开可选值的包装可能会导致错误。

如果索引存在index(of:)则仅返回第一个匹配索引。

修复:

extension ArrayProxy where T: Equatable {
mutating func removeElement(_ element: T) {
var indexs: [Int] = []
for (index, foo) in array.enumerated() {
if foo == element {
indexs.append(index)
}
}
indexs.sorted(by: >).forEach({
array.remove(at: $0)
})
}
}

最新更新