[SwiftUI] @Environmentで変数が共有できるケース、できないケース

SwiftUI

Environmentで設定した変数が、ビューの関係性によって、同じ変数を参照できるときと、できない時がありました。

Environment変数が共有されるケース

NavigationViewで遷移するビュー間では、Environmentで設定した同じ変数を参照することができます。

AppleもWWDCで、Environmentを導入するメリットの1つとして説明しているので、明らかですが念のため。

Environment変数が共有されないケース

@Environment変数は、.sheetで表示するビューには、自動では引き継げませんでした。

どうやら、バグという扱いらしいですが、今のところ直ってません。(2020.Apr.12現在)

ですので、sheetで表示するビューに対して、明示的に、.environemnt(….)として、渡す必要があります。

他のビューは?

これまで、ビューの遷移として、NavigationViewかSheetしか知らなかったのですが、TabViewがあることを見つけました。
TabViewではどうなのか調べてみました。

TabViewでは、Environment変数は共有されます

共有されないと困る代表格のManagedObjectContextで試しました。

途中のコメントされている.environmentコードの有無にかかわらず同じ値を参照することができました。

まとめ:SwiftUIで.environmentを使って変数を共有できるビュー

共有できるビュー
  • NavigationView
  • TabView
共有できないビュー
  • .sheet

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です