因为我经常使用此例程,所以有人可以创建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的方法如何具有不同的参数类型都使我着迷。数组和字典是我仍然无法正确扩展它们的两件事。谢谢。
Collection
您可以将RangeReplaceableCollection其元素扩展,约束为Equatable并将其声明为变异。如果要返回Bool以防追加成功,还可以使结果可丢弃。您的扩展程序应如下所示:
RangeReplaceableCollection
Equatable
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) } } }