SwiftUIプロジェクトでAPI接続で値を取得する際は、Viewに表示する際にJsonModelとしてなど、取得元のJSONデータに沿った形でSwiftUIのファイルでも値を定義する必要があります。
この記事では、JsonModelのstruct内変数の指定の方法について解説します。
◆動作検証環境
・ローカル環境:mac Catalina
・XCode:12.1
・SwiftUI:2.0
・XCode:12.1
・SwiftUI:2.0
スポンサードリンク
デコード用struct(JsonModel)の作成例
nullが含まれるフィールドの場合
例えば以下のようなJSONデータを取得する場合:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | [ { "id": 2, "user": 1, "plant_name": "ナス", "variety_name": null }, { "id": 1, "user": 1, "plant_name": "トマト", "variety_name": "桃太郎" } ] |
以下のようなstructを作る必要があります。
1 2 3 4 5 6 7 8 | struct Infos: Codable,Identifiable { var id: Int var user: Int var plant_name: String var variety_name: String? } |
Identifiable を追加する事でViewの表示でForEach 文を使う際にid の指定を省略する事ができます。
JSONデータを確認するとvariety_name にnull が含まれています。
このように、元のデータでnull が許容されている場合は、SwiftUI側でもそれに対応する必要があり、var variety_name: String? とオプショナル型にします。
null が許容されている値を表示する際は、デフォルトの値が必要となります。
1 2 3 | Text(info.variety_name ?? "") |
Int型の場合は、デフォルトに数字を入れる必要があり、nullで表示したくない場合はif文など使って表示の有無を条件づけます。
1 2 3 4 5 | if info.user != 0{ Text(String(info.user)) } |
Date型が含まれるフィールドの場合
下記のようにDate型がふくまれる場合:
1 2 3 4 | "created_at": "2020-10-28T17:52:24.154547+09:00", "updated_at": "2020-10-31T12:11:37.851665+09:00", |
Swift側の対応するsrruct内の変数の方はStringを指定します。
この時にDate型を指定するとエラーとなります。
1 2 3 4 5 6 | struct Infos: Codable,Identifiable { var created_at: String var updated_at: String } |
以上、SwiftUIプロジェクトでJsonModelのstruct内変数の指定の方法について解説しました。