【Swift UI】@Environmentとは?使い方と使用可能なキー値一覧

この記事からわかること

  • Swift UI@Environmentとは?
  • @Environmentの使い方
  • 取得できる環境値一覧(EnvironmentValues)

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

Swift5.1から導入された機能「Property Wrapper(プロパティラッパ)」の1つ@Environmentの使い方や取得できる値などをまとめていきたいと思います。

@Environmentとは?

@Environment@State@Bindingなどと同じくSwift5.1から導入された機能「Property Wrapper(プロパティラッパ)」の1つです。プロパティラッパの特徴はプロパティ(変数)に対する操作や処理をカプセル化して定義することで特定のキーワードを追加するだけで任意の動作や挙動を行わせることができるデータ構造です。

その中でも@Environment環境値を読み取ることができます。環境値とはタイムゾーンやフォント、カラースキーム(ダークモードのON/OFF)などデバイスごとに設定されている値のことです。

似たようなProperty Wrapperに@EnvironmentObjectがありますがこちらはクラスに対して使用するProperty Wrapperです。

使い方

@Environmentとは他のProperty Wrapperとは違いプロパティの前につけるだけではなく、読み取る値のキー値(\.キー値)形式で渡します。

@Environment(\.colorScheme) var colorScheme: ColorScheme
@Environment(\.キー値) var 変数名: [型]

環境値はiPhoneの設定などからユーザーによって変更された場合も自動で更新されます。

また基本的に環境値は読み取り専用でこちらから設定を変更することはできません。変更しようとすると以下のようなエラーを吐きます。

Cannot assign to property: 'colorScheme' is a get-only property

取得できる値のキー一覧(EnvironmentValues)

概要
accessibilityDifferentiateWithoutColor: Bool 色なしで区別するためのシステム設定を有効にするかどうか
accessibilityEnabled: Bool ユーザーアシスタントを使用しているかどうか
accessibilityInvertColors: Bool ユーザーアシスタントの色の反転のシステム設定が有効かどうか
accessibilityLargeContentViewerEnabled: Bool ラージコンテンツビューアが有効かどうか。
accessibilityReduceMotion: Bool システムの優先設定でモーションの軽減が有効になっているかどうか
accessibilityReduceTransparency: Bool 透明度の軽減のシステム設定が有効かどうか
accessibilityShowButtonShapes: Bool ボタンの形状を表示するためのシステム設定が有効かどうか。
legibilityWeight: LegibilityWeight? テキストに適用するフォントの太さ
dismiss: DismissAction 現在のプレゼンテーションを閉じるアクション
dismissSearch: DismissSearchAction 現在の検索インタラクションを終了するアクション。
refresh: RefreshAction? ビューの環境に格納された更新アクション
openURL: OpenURLAction URLを開く
colorScheme:ColorScheme 外観モードの設定 ダークモードかライトモードか
colorSchemeContrast:ColorSchemeContrast ColorSchemeのコントラスト
controlSize:ControlSize ビュー内のコントロールに適用するサイズ
controlProminence: Prominence ビュー内のコントロールに適用するプロミネンス
controlActiveState: ControlActiveState ビュー内のコントロールのアクティブな状態
defaultWheelPickerItemHeight: CGFloat 日付ピッカーなどのホイールスタイルピッカーのアイテムのデフォルトの高さ
headerProminence: Prominence ビュー内のセクションヘッダーに適用するプロミネンス
menuIndicatorVisibility: Visibility ビュー内のコントロールに適用するメニューインジケーターの可視性
calendar: Calendar ビューが日付を処理するときに使用する現在のカレンダー
locale: Locale ビューが使用する現在のロケール
timeZone: TimeZone ビューが日付を処理するときに使用する現在のタイムゾーン
displayScale: CGFloat この環境の表示スケール
imageScale: Image.Scale この環境の画像スケール
pixelLength: CGFloat 画面上のピクセルのサイズ
isLuminanceReduced: Bool ディスプレイに現在輝度を下げる必要があるかどうかを示すBool値
editMode: Binding? ユーザーがこの環境に関連付けられたビューのコンテンツを編集できるかどうかを示すモード
isEnabled: Bool この環境に関連付けられたビューがユーザーの操作を許可するかどうかを示すBool値
isFocused: Bool 最も近いフォーカス可能な祖先にフォーカスがあるかどうかを返します
isPresented: Bool この環境に関連付けられているビューが現在表示されているかどうかを示すBool値
isSearching: Bool ユーザーが現在、周囲の検索可能な修飾子によって配置された検索フィールドを操作しているかどうか
resetFocus: ResetFocusAction デフォルトのフォーカスを再評価するようにフォーカスシステムに要求するアクション
keyboardShortcut: KeyboardShortcut? この環境のボタンがトリガーされるキーボードショートカット
defaultMinListHeaderHeight: CGFloat? リスト内のヘッダーのデフォルトの最小高さ
defaultMinListRowHeight: CGFloat リスト内の行のデフォルトの最小高さ
backgroundMaterial: Material? 現在のビューの下にあるマテリアル
redactionReasons: RedactionReasons ビュー階層に適用される現在の編集理由
scenePhase: ScenePhase 現在のSceneのフェーズ
horizontalSizeClass: UserInterfaceSizeClass? この環境の水平サイズクラス
verticalSizeClass: UserInterfaceSizeClass? この環境の垂直サイズクラス
description: String 環境値インスタンスの内容を表す文字列
allowsTightening: Bool 使用可能なスペースにテキストを収めるために文字間の間隔を狭める必要があるかどうかを示すBool値
disableAutocorrection: Bool? ビュー階層で自動修正が有効になっているかどうかを決定するBool値
dynamicTypeSize: DynamicTypeSize 現在の動的タイプのサイズ
font: Font? この環境のデフォルトフォント
layoutDirection: LayoutDirection 現在の環境に関連付けられているレイアウトの方向
lineLimit: Int? テキストがビューが占有できる最大行数
lineSpacing: CGFloat 1つのラインフラグメントの下部と次のラインフラグメントの上部の間のポイント単位の距離
minimumScaleFactor: CGFloat 使用可能なスペースにテキストを収めるためにフォントサイズを縮小するための最小許容比率
multilineTextAlignment: TextAlignment コンテンツが改行を折り返すか含むときに、テキストインスタンスがどのように行を揃えるかを示す値
textCase: Text.Case? 環境のロケールを使用して、表示時にテキストの大文字と小文字を変換するための文体のオーバーライド
truncationMode: Text.TruncationMode レイアウトがテキストの最後の行を切り捨てて、使用可能なスペースに収まるようにする方法を示す値
undoManager: UndoManager? ビューの元に戻す操作を登録するために使用される元に戻すマネージャー
symbolRenderingMode: SymbolRenderingMode? 現在のシンボルレンダリングモード、またはnilは、現在の画像と前景スタイルをパラメータとして使用してモードが自動的に選択されることを示します
symbolVariants: SymbolVariants この環境で使用するシンボルバリアント
widgetFamily: WidgetFamily ウィジェットのテンプレート—小、中、または大

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

私がSwift UI学習に使用した参考書

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index