Open3

Data Flow Through SwiftUI - WWDC2019 -

kamimikamimi

Principles of Data Flow

  • データとは何か
    • UIを動かす情報
    • モデルデータもデータ
  • データフローのツール
    • 基本理念
      • データを読み込む度に依存性を構築していること(Data Access as a Dependency)
        • データに合わせ、新しい値が示されるのが依存性
        • SwiftUIは宣言的で、手動での同期や無効化は不要で、依存性をフレームワークに書くだけ
      • 全てのデータは単一のデータソースを持つこと(Source of Truth)
        • 常に同期させる必要があるため、データソースの複製は、バグや矛盾をうむ
        • そこでデータを共通の祖先まで引き上げ、2つの子要素に参照させる
        • データソースがビューとデータ間のバグを排除する

kamimikamimi

Anatomy of a View Update

  • システムが動的に容量を作れば、初期値を指定する必要がある
  • Viewは頻繁に更新されるが、storageは保持される
struct PlayerView: View {
  let episode: Episode
  @State private var isPlaying: Bool = false  // 変数にはview上で容量が割り当てられ、追跡できる

  var body: some View {
    VStack {
      Text(episode.title)
      Text(episode.showTitle).font(.caption).foregroundColor(.gray)

      Button(action: {
       self.isPlaying.toggle()
      }) {
        Image(systemName: isPlaying ? "pause.circle" : "play.circle")
      }
    }
  }
}



  • ボタンを押下した時の挙動
    • Stateの変数が変わると、SwiftUIが動き出す

      • ボタンでアクションを実行し、Stateを切り替える
    • Stateが変化すると、Viewを有効にする

  • bodyとその子要素を再計算する
  • 全ての変化は下に流れていく
    • 変化し部分のみをレンダリングするので、とても効率的


9:26