BETA

Data Flow through SwiftUI: 視聴記録

投稿日:2019-09-03
最終更新:2019-09-03

後半、めっちゃムズだった...まだ噛み砕けていない

データはビュー(VC)に、依存性を忍び込ませる。(たぶん、それ自体は悪いことではない)
旧来は、それは手動更新が必要だった。
SwiftUIのデータ依存性は宣言的。手動の同期・無効化は不要
= 「フレームワークが依存性を管理してくれる」

☆ すべてのデータは、単一データソースを持つ

このプレゼンを通して何度か繰り返し出てくるコンセプトなのだが、よみとけない...

データソースの複製はバグ・矛盾を生む。

6:50 @Stateの例。
selfはimmutableだから、通常のvar変数だと toggle() できない。
そこで @Stateを用いる。

(@Stateプロパティに )private が付く = @State は、「ビューによって管理される」ことにほかならない

9:00
@State の値が変わる ==> body 内の子ビューに再計算が走り、ビューが再描画される
(変化した部分だけをレンダリングする。効率的)

☆ Every @State is a source of truth
☆ Views are a function of state, not of a sequence of events

「ビューとは、状態のいち "機能" である」

今までは View Higharhy を直接操作してきた。サブビューを足したり、変数を変えたり。
SwiftUI ==> データソースたる State を操作することで、ビューが描画される。
ビューとは。現在の State の反映に過ぎない! そんな世界観。

11:00

User ==> Action ==> State ==> View ==> User

常に一方向。ビューの更新は予想しやすくなる

12:30

サブビューにリファクタリングしたとき、サブビューに新たに @State を追加するのは得策ではない。
データソースが1個増えるってことだし、親ビューの @State と同期させる必要があるから。
そこで @Binding。子ビューは @Binding を使う

☆ Binding

  • Read and write without ownership
  • Derivable from @State

初期値の指定も必要ない(@Stateから引き出される)

13:40

@State プロパティに $ をつけ、 binding を抽出できる。
これで Binding を通し、子が親のState にアクセスできる。

15:40
Binding は、SwiftUI標準の Toggle / TextField / Slider などに現れる

State は、タイマー・通知といった「外的な変化(イベント)」にも容易に対応可能。
ユーザーインタラクションが Action を発行し、State を変更するのと同様、
Timer や 通知 も、Combine を通して Action を発行(Publish) して、State を変更する。あとは同じ!
つまり外的イベントも、透過的に扱える、ということだろう。クール!

SwiftUIにおける、「外的な変化(イベント)」 = Publisher

☆ @ObservableObject (旧 BindableObject)

  • external
  • reference type
  • 既に持っているモデルに最適

【Model】------------- @ObservedObject ------------->> 【View】

値型を使うくらいなら、 @ObservedObject(参照型) を使え
データの変化が検知され、ViewHigharchy も更新される。いいことづくめ。

とにかくやることは「依存性を定義すること」、これだけ。あとはすべてSwiftUIのしごと。


すべてのデータは、データソースを持つ。
データソースを扱う方法は、2つある。

  1. State - view-local、Value、Framework Managed
  2. Observable Object - External(タイマーとか通知とか)、Reference、Developer Managed

感想

むずいなw手を動かそう。そのたび何度も見なおそう。着実に理解を深めていこう。

感想

@State と @Binding と @ObservableObject と @EnvironmentObject の使い分けが全然わからない...

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

備忘録ほどの価値もない走り書き

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!