【iOSDC Japan 2023 レポート】「SwiftUIでの非同期処理データの状態管理を考える」を聞いてきた。

2023.09.04

はじめに

年に一度のiOSエンジニアの為のお祭り iOSDC Japan 2023に参加しています。

せっかくなので、参加したセッションのレポートを書きたいと思います。

SwiftUIでの非同期処理データの状態管理を考える

登壇者

概要

みなさんはSwiftUIで非同期処理データの状態管理をどう行なっていますか?

  • enumを使う方法: enum DataState { case loading; case success(Value); ... }
  • コンポーネントを使う方法: LoadingContent(fetch: fetch) { Content($0) }

などがあると思いますが

  • リロード中は前回の結果を表示したい場合
  • ページングに対応する場合

等の要件で、微妙に異なるバリエーションがいくつか存在する上、それらの方法にはメリットとデメリットがあります。

パフォーマンス低下を引き起こしていることも...。

このトークは、このような状態管理方法を複数個、実装ケースと共に紹介・考察しそれぞれの方法がどのような実装ケースに適しているかを分析・分類していく内容となっています。

引用: fortee

資料

感想

非同期中のデータ状態は様々な状態があります。

  • 成功
  • 失敗
  • ロード中
  • ページング成功
  • ページング失敗
  • ページングロード中
  • プルリフレッシュ成功
  • プルリフレッシュ失敗
  • プルリフレッシュ中

この状態を管理する方法として、enumを使用する方法を最初に説明されていました。状態管理のプロパティが一つになり、とても状態がわかりやすくなっていました。

実際にその値を見て、描画する側の実装も紹介されており、よりイメージが膨らませやすかったです。

最後は、enum + コンポーネントによる状態管理の実装例も共有していただき、enumでの状態管理で発生しがちなボイラープレートを解決出来、デザインの統一に効果的とのことです。

改めてどのように状態管理をするのが良いのか考えるキッカケになり、勉強になったセッションでした。

おわりに

状態管理はシンプルな方が良いですね。複雑な箇所がないか今一度確認したいと思います。

iOSDC 2023 レポート関連

Day0

Day1