SwiftのArrayを拡張してremoveメソッドを追加する。
SwiftのArrayには removeAll や removeAtIndex はありますが、removeしたい element を渡して remove するメソッドがありません。
そこで、removeメソッドを追加しました。
参考にしたのはstackoverflowのこちらの記事です。
stackoverflow.com
上記の記事で紹介されている通りSwift2以降では下記コードで実装するようです。
extension RangeReplaceableCollectionType where Generator.Element : Equatable { // Remove first collection element that is equal to the given `object`: mutating func removeObject(object : Generator.Element) { if let index = self.indexOf(object) { self.removeAtIndex(index) } } }
RangeReplaceableCollectionType という見慣れない protocol が出てきました。
RangeReplaceableCollectionType のReferenceを見ると妥当な protocol のようなのでこちらを拡張すると良さそうです。
上記コードのコメントに書いてある通り、こちらだと最初のヒットした element しか remove しないので、今回は複数の値がヒットした場合も remove するメソッドに変更して使用しました。
コードは下記の通りです。
extension RangeReplaceableCollectionType where Generator.Element : Equatable { mutating func remove(element : Generator.Element) { guard let index = self.indexOf(element) else { return } self.removeAtIndex(index) self.remove(element) } }