0

我创建了自定义数组类型。现在我想在其中再添加一个方法,它可以通过将实际元素作为参数传递来删除数组的元素。我知道如果我们将自定义数组的扩展添加为 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)!)
 }
}
4

1 回答 1

0

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

如果索引存在, 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)
        })
    }
}
于 2017-08-11T10:04:37.583 回答