如何使用 Equatable 创建扩展以删除自定义数组元素?
Posted
技术标签:
【中文标题】如何使用 Equatable 创建扩展以删除自定义数组元素?【英文标题】:How to create extension with Equatable to delete custom array element? 【发布时间】:2017-08-11 09:29:00 【问题描述】:我创建了自定义数组类型。现在我想在其中再添加一个方法,它可以通过将实际元素作为参数传递来删除数组的元素。 我知道如果我们将自定义数组的扩展添加为 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)!)
【问题讨论】:
你有什么问题? 我更新了问题 其实removeElemetat是无法访问的。而且我也怀疑自己做对了还是错了? 【参考方案1】:强制解开可选值可能会导致错误。
如果索引存在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)
)
【讨论】:
以上是关于如何使用 Equatable 创建扩展以删除自定义数组元素?的主要内容,如果未能解决你的问题,请参考以下文章
如何扩展使用 AbstractBaseUser 创建的现有自定义用户模型以拥有多种用户类型,如客户、培训师和作者?
来自 equatable 协议的 func == 不适用于自定义对象,swift