【Swift】NSMutableArrayのremoveObject:をSwiftで出来ないものか

前にはてなに書いていた記事の焼き直しなのですが、Swiftの配列でNSMutableArrayのremoveObject:と同じことが出来ないものかと悩んだときの共有です。もっといい方法があったら教えてほしいです。

関数が無い

良く、Swiftで実装をしていると、ある配列(リスト)から特定のオブジェクトを削除したくなる時がありませんでしょうか? Objective-Cで言うところのNSMutableArrayクラスの”removeObject:”。Swiftでは関数が無く安直に移植が出来ませんでした。

それっぽくやってみる

Swiftの配列には”remove(at:)”というindexを指定して、そこにあるオブジェクトを削除する関数は用意されています。とりあえず、これを使ってみましょうか。

let index = array.index(where: { (each) in
    return each === butsu
})

if index != nil {
    array.remove(at: index!)
}

arrayが配列です。”index(where:)”を使って、butsuが入っているindexを探します。で、そのindexを使って”remove(at:)”で消しにかかる。なんだか遠回しですね。

ちょっと違うけど

配列の参照が変わってしまうと思いますが、もう一つやり方があります。

let removed = array.filter { (each) -> Bool in
    return each !== butsu
}

フィルターを使うのですが、removedにbutsuが除かれた配列が返ってきます。こっちの方が見た目はスッキリしますかね。

終わりに

標準の関数がもうちょっとあるといいですね。他に良い方法がありましたら教えて頂けるとありがたいです。こんな方法でやってるぜ!! みたいな。。。

関連記事

【Google Home】Google Homeにテキストを読み上げさせたい

【Swift】配列から一部分の抜いた時に返されるArraySliceについて

Atomでterminal-plusが動かなくなったときの対処法

【Java】Java SE 10をubuntuにインストールしてみた【初心者向け...

SwiftでOpenALの簡単サンプルソース

【Objective-C】'void (^ _Nonnull __strong)...