[Swift] Swift3でArrayにremoveObjectを実装する

NSArrayにはremoveObjectというインデックスではなくオブジェクトを指定して配列内の該当する要素を削除するメソッドがあります。

同じものがSwiftのArrayにもあるかと思ったのですが無く困ってましたが、以下のようにextensionを使ってArrayを拡張すれば対応可能になります。

extension Array where Element: Equatable {
    // 先頭のオブジェクトのみ削除
    mutating func remove(firstObject: Element) {
        if let index = index(of: firstObject) {
            remove(at: index)
        }
    }

    // すべてのオブジェクトを削除
    mutating func remove(object: Element) {
        if let index = index(of: object){
            self.remove(at: index)
            self.remove(object: object)
        }
    }
}

これをファイルの先頭に書いておくと、以下の様にArrayを拡張してオブジェクトを指定して配列内の要素を削除することが出来ます。

var test = Array<String>()
test=[“apple”, “orange”, “Orange”, “apple”]

test.remove(firstObject: “apple”)
// => [“orange”, “Orange”, “apple”]
// 先頭のappleのみ削除され、2つ目以降のappleは削除されない。

test.remove(object: “apple”)
// => [“orange”, “Orange”]
// すべてのappleが削除される。