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

How to create extension with Equatable to delete custom array element?

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

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

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:) 只有 return 首先匹配索引。

修复:

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: [=10=])
        })
    }
}