有人可以给swift数组中的“append如果不存在”的方法吗?

因为我使用这个例程很多,有人可以创build一个Swift数组的扩展方法,它将检测是否将要附加的数据是否已经存在,然后不附加? 我知道这只是less数几个这样的代码的问题:

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 = [Int]() for element in inputArr { arr.appendUnique(element); } 

不同元素types的相同方法。 坦率地说,从这个简单的代码,我也想学习如何扩展与variablestypes的Collection 。 当我们用不同的参数types初始化对象的时候,Array的方法如何能有不同的参数types,这让我着迷。 数组和字典是两件事情,我仍然不知道如何正确地扩展它们。 谢谢。

你将需要约束你的数组元素equatable,使你的方法变异。 如果你想返回Bool以防追加成功,你也可以将结果丢弃。 你的扩展应该是这样的:

 extension Array where Element: Equatable { @discardableResult mutating func appendIfNotContains(_ element: Element) -> Bool { if !contains(element) { append(element) return true } return false } }