【SwiftUI】@ObservedObjectをCodable変換する方法

@ObservedObjectをCodable変換する方法について解説します。

スポンサーリンク

環境

この記事の情報は次のバージョンで動作確認しています。

【Xcode】11.6
【Swift】5.2.4
【iOS】13.6
【macOS】Catalina バージョン 10.15.6
スポンサーリンク

概要

Codableを使って他の形式にデータ変換するには、対象のオブジェクトがCodableプロトコルに準拠している必要があります。
次に示すUserクラスは、3種類の型のプロパティを保有していますが、いずれの型もCodableプロトコルに準拠している為、クラス自体もCodable準拠となります。

しかし、プロパティに@Publishedプロパティラッパーを付けると、Codable準拠でないと見なされエラーになってしまいます。

エラーメッセージ

これを回避するには、自分でCodableプロトコルに適用させる必要があります。

スポンサーリンク

Codableプロトコルへの適用

クラスや構造体をCodableプロトコルに適用させるには、Swiftに次の3つの情報を示してやる必要があります。

  1. 対象プロイパティの指定
  2. 各プロパティのdecode(復号化)アクション
  3. 各プロパティのencode(コード化)アクション

最終的なコードを先に示します。

①対象プロパティの指定

CodingKeyに準拠する列挙型(CodingKeys)を作成し、変換の対象とするプロパティをリスト化します。

②プロパティのdecode(復号化)アクション

各プロパティのdecodeアクションを定義します。
1行目と2行目は、そのままコピペでOK。
3行目以降で各プロパティのdecode処理を指定します。
decodeメソッドの第一引数で、各プロパティに合わせた"型名.self”を指定するのがポイントです。

③プロパティのencode(コード化)アクション

各プロパティのencodeアクションを定義します。
こちらも、1行目と2行目はコピペでOK。
3行目以降で各プロパティのencode処理を指定します。

以上で、対象のクラスや構造体がCodable準拠となり、コンパイルできるようになります。

スポンサーリンク

あわせて読みたい記事

【Swift】Codableを使ったJSON変換
Codableを使ったJSON変換について解説します。
【SwiftUI】@ObservedObjectの使い方
データクラスの更新を監視する@ObservedObjectの使い方を解説します。これを利用すると複数のViewから同一インスタンスへの同期が可能になります。
Kindle unlimited 読み放題で読める管理人のおすすめ本です!
スポンサーリンク
SwiftUI
カピ通信