読者です 読者をやめる 読者になる 読者になる

SwiftのArrayを拡張してremoveメソッドを追加する。

swift swift2

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)
    }
}