API とかで配列にいろんな型が来ちゃう時にパース側に unknown 型を用意する
github の event とかみたいなやつで
[ { type: 'aaa', payload: { a: 'A' } }, { type: 'bbb', payload: { b: 'B'} }, ]
みたいな type ごとにその中身が違うみたいな時がたまにある クライアントでパースするとき、例えば swift とかだったら今な codable とかが使えて、割と固くパースするとこんな感じ
struct Event { let type: String let payload: Payload init(from decoder: Decoder) throws { ... switch type { case "aaa" payload = .AAA(try values.decode...) case "bbb" payload = .BBB(try values.decode...) default: throw } } } enum Payload { case AAA(AAAPayload) case BBB(BBBPayload) } struct AAAPayload {} struct BBBPayload {}
まぁなんかこういう感じで知らないのが来たら throw されるので、payload に知らないのが decode されることがない。
でもこういうの知らない間に type が増えてたりするので、それで throw されてこの配列全部がわからないことになると、それはそれで困ったなぁとなる。なので知らない場合は unknown みたいなのを Payload enum に追加してそっちにしておくみたいなのにしておけば、まぁ落ちないしいいかなって感じでそうしてる。
取り扱う時に filter なりの作業する必要とかはあるけど。