iOS の家計簿アプリをつくる(年画面作成編)

advent_calendar アドベントカレンダー

はじめに

こちらは個人開発アプリができるまで by am10 Advent Calendar 2024の 7 日目の記事です。

7 日目は年画面を作成します。
完成形はこんな感じです。

1

タブ切替

まずはタブを作成します。YearView.swift ファイルを作成し下記のように year を追加します。

ContentView.swift を下記のように修正します。

ExpenseLogApp の ContentView の生成処理を下記のように修正します。

これでタブ切替は完成です。

年選択

次に年を選択するためのピッカーを作成します。値は現在から 10 年分でいいでしょう。

YearView を下記のように修正します。

これで 10 年分の年を選択するピッカーができました。

項目選択

次に項目選択をするピッカーを作成します。
項目を扱いやすくするために Category.swift ファイルを作成し下記のように実装します。

項目を追加したい場合はここに記載していきます。
次に CategoryFilterPicker.swift ファイルを作成し下記のように実装します。

YearView に下記を追加して項目ピッカーは完成です。

登録ボタン

次に登録画面表示用のフローティングボタンを作成します。
FloatingButton.swift を作成し下記のように実装します。

ContentView のルートを ZStack にして下記を追記します。

これで登録画面表示用のフローティングボタンは完成です。

データ取得

async/await に対応

次にデータ取得処理を作成します。API は年と月を指定して月ごとに取得しかないので指定年の 1 ~ 12 月を順次取得しなければなりません。async/await に対応して扱いやすくするために修正します。ここで残念なお知らせです Swift 6 に対応した結果そこそこ修正が必要なようです。。。

ResponseItem.swift ファイルを作成し下記のように実装します。

Item を下記のように修正します。

ExpenseLogAPI の register の部分を Item から ResponseItem に修正します。

ExpenseLogAPIClient の取得・登録処理の Item を下記のように ResponseItem に修正します。

Session と ExpenseLogAPIClient に下記のように Sendable を追加します。

ExpenseLogAPIClient に下記を追加します。

これで async/await に対応できました。

サーバーからデータ取得

YearView に下記を追加すればサーバーからのデータ取得は完成です。

ローカルにデータを保存

毎回サーバーとは通信したくないので SwiftData を使って端末内に家計簿データを保存するようにします。
サーバーとの整合性を取るためにデータを取得した場合はその年のローカルのデータを削除してから挿入するようにします。
今回のアプリではデータ取得はそこまで頻繁に行う操作ではない想定なので毎回削除してから挿入します。

Database.swift ファイルを作成し下記のように実装します。

YearView を下記のように修正します。

これでサーバーから取得したデータを端末に保存できるようになりました。
さらに下記を追加して年ピッカーと項目ピッカーで選択した年と項目の家計簿データを取得するようにします。

合計金額表示

YearView に下記を追加して合計金額を表示します。

グラフ表示

横軸を月、縦軸を金額した項目ごとの積立棒グラフを作成するには家計簿データを項目ごとにわけさらにその中で月ごとにわける必要があります。
項目選択時はサブ項目ごとにわけさらにその中で月ごとにわける必要があります。

YearChartFormatter.swift ファイルを作成し下記のように実装します。

これでグラフ用のデータ整形処理はできました。
次にグラフ表示時の項目とサブ項目の色を下記のように Assets に追加します。

2

CategorySub に下記のように color を追加してサブ項目に色を追加します。

Category に下記を追加します。

YearView に下記を追加すればグラフ表示は完成です。

余白など調整

最後に余白などを調整し YearView の body はこんな感じです。

おわりに

これで年画面は完成です。Charts があるのでグラフ表示も楽々できるようになりました。SwiftUI はいいですね。

明日は月画面を作成予定です。

1人でアプリを作る人を支えるSwiftUI開発レシピ | 佐藤 剛士 |本 | 通販 | Amazon
Amazonで佐藤 剛士の1人でアプリを作る人を支えるSwiftUI開発レシピ。アマゾンならポイント還元本が多数。佐藤 剛士作品ほか、お急ぎ便対象商品は当日お届けも可能。また1人でアプリを作る人を支えるSwiftUI開発レシピもアマゾン配送商品なら通常配送無料。

コメント

タイトルとURLをコピーしました