しおメモ

雑多な技術系ブログです。ニッチな内容が多いです。

Arrayのextensionでサブクラスにダウンキャスト

タイトル通りで、UIViewControllerUIViewArrayから特定のサブクラスだけ抜き出す処理はよく書くので、 ただのaliasですが、少しでも楽しようとextensionにしてみる。

extension Array {
    func `as`<E>(_ type: E.Type) -> [E] {
        return self.compactMap({ $0 as? E })
    }
}

使い方

// Before
let pageViewController = children.compactMap({ $0 as? HogePageViewController }).first
// After
let pageViewController = children.as(HogePageViewController.self).first

だいぶスッキリ(?)

.firstのケースが多いので、そこまで含めてpickとか適当なのをもう一つ作ってもいいかもしれない🤔