🐥

[Swift] 一つの変数で複数の型を受け取れるようにする方法

2023/02/01に公開

同じデータなのにライブラリなどの使い方によっては、別のClass型で扱わないといけないことがあるかなと。

自分の場合
apollo-iosでcodegenしたクラスで同じSchemaに対してクエリ発行してもWHERE句などの違いで別クラスデータとして返却されることで変数が共通化できないうことにぶち当たりました。

protocol + extension を利用して型定義をすることで解決できることを知りました!
こんな感じ

protocol PData {}
extension DataA: PData {}
extension DataB: PData {}
extension DataC: PData {}

使うときは単純にprotocol型を定義してあげればいいだけ

var Hoge: PData?

Hoge = PDataA()
Hoge = PDataB()
Hoge = PDataC()
// どれでも行ける↑

これで共通処理とか書きやすくなるなー
もしもっとスマートな書き方あったら教えて下さい!

Discussion