Cover Image for Working with UI controls — SwiftUI Tutorials やってみた

Working with UI controls — SwiftUI Tutorials やってみた

概要

Working with UI controls — SwiftUI Tutorials | Apple Developer Documentationをやってみたのでメモ

メモ

Section 1: Display a user profile

static let `default`
  • default は予約後だけど、エスケープすることで使えるっぽい
  • swift の struct の default を生やす方法としてメジャーなパターンなのかな?
  • Environment を body の中に書くとアクセスできない
    • それはそうという気がする
  • toolbar でツールバー追加できるのはよい
    • こういうのはすぐ使いたくなる
    • これはメソッドチェーンで書く方がみやすいのか...

Section 2: Add an edit mode

  • profile 一つしか管理しなくて大丈夫か?
    • ネイティブアプリだからユーザー1人しかいないし大丈夫だ
    • この辺の思考の癖が抜けない
  • EditMode | Apple Developer Documentation
    • 標準の edit mode が用意されてるのはいい
    • EditButton も標準で用意されていてそこに反映されるのか

Section 3: Define the profile editor

  • Divider は CSS より本質的
    • CSS だとどっちかのborderにつけるので本質的ではない
  • constant
    • immutable な value を Binding で wrap できる
    • preview とか テスト以外で使わない方が良さそうな匂いがする
  • Binding<T> で渡すには $ をつける
    • Bindingで受け取ってるということはポインタを参照してる感じなので、変更すれば元の値にも影響が出る
  • enum の rawValue ってなんだ
    • 多分enum型じゃない元の値ということだと思う
  • Picker が標準で用意されてるの良い
    • 選択時のstate更新とかも隠蔽されてそうなので楽そう
  • DatePicker も標準であるのか
    • これは羨ましい
    • webだとブラウザ依存で体験を揃えるの大変

Section 4: Delay edit propagation

  • Edit ボタンが自動で Done ボタンに変わる
    • Cancel ボタンは自分で用意しないといけないが...
    • onAppear / onDisappear でボタンとは別の部分に決定/キャンセルのロジックをかける
  • Observable なものも State に代入した時点で関連付けが消える
    • DeepCopy されてる感じ
    • 確かにこの挙動の方が安全
    • そのため一度Stateに入れておいて、Doneが押されたら書き戻すという遅延更新ができる
  • よく考えたらモーダルを出すことを意識せずにモーダルができてるのすごい
    • 表示を切り替えてるだけだがちゃんと上に被ってるように見える