因为我经常使用这个例程,有人可以创建一个 Swift 数组的扩展方法,它将检测是否要追加的数据已经存在,然后不追加?我知道这只是一些像这样的代码的问题:
var arr = [Int]()
for element in inputArr {
if !arr.contains(element) { arr.append(element); }
}
变成:
var arr = [Int]()
for element in inputArr { arr.appendUnique(element); }
或者:
var arr = [String]()
for element in inputArr {
if !arr.contains(element) { arr.append(element); }
}
变成:
var arr = [String]()
for element in inputArr { arr.appendUnique(element); }
不同元素类型的方法相同。坦率地说,从这个简单的代码中,我还想了解如何使用变量类型扩展Collection
。每当使用不同的参数类型初始化对象时,Array 的方法如何具有不同的参数类型,这让我着迷。 Array 和 Dictionary 是我仍然不知道如何正确扩展它们的两件事。谢谢。
最佳答案
您可以扩展 RangeReplaceableCollection
,将其元素限制为 Equatable
并将您的方法声明为可变的。如果您想在追加成功时返回 Bool,您也可以使结果可丢弃。您的扩展程序应如下所示:
extension RangeReplaceableCollection where Element: Equatable {
@discardableResult
mutating func appendIfNotContains(_ element: Element) -> (appended: Bool, memberAfterAppend: Element) {
if let index = firstIndex(of: element) {
return (false, self[index])
} else {
append(element)
return (true, element)
}
}
}
关于ios - 有人可以在 swift 数组中给出 "append if not exists"方法的片段吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46519004/