Swiftで配列の型をキャストする
タイトルの通りですが、[ProtocolA] → [StructB]みたいな形にキャストして、StructB以外を除いた配列を作るやり方です。
O(N)で処理時間増えます。
サンプルコード
import Foundation
protocol ProtocolA {
var title: String { get }
}
struct StructA: ProtocolA {
var title: String
}
struct StructB: ProtocolA {
var title: String
var subTitle: String
}
let ob1 = StructA(title: "1")
let ob2 = StructB(title: "2", subTitle: "2")
let ob3 = StructB(title: "3", subTitle: "3")
let arr: [ProtocolA] = [ob1, ob2, ob3]
// [StructB]
let arr2 = arr.flatMap { $0 as? StructB }
arr2.forEach { print($0.subTitle) }
実行結果
2
3