【SwiftUI】
@Stateプロパティを持つ変数の初期値をinit処理で設定する方法

@Stateの初期値を動的に設定する

投稿日 2022/08/07 更新日 2022/08/07


こんにちは。当サイトの管理者「元木皇天」です。

今回はSwiftUIの@Stateプロパティを持つ変数の初期値をinit処理で設定する方法について解説いたします。

環境
OS:MacOS Big Sur ver11
Swift:バージョン5.5.2
Xcode:バージョン13.2.1

やりたいこと

@Stateプロパティを持つ変数の初期値をinit処理で設定する

参考文献
Apple Developerサイト-State-init(initialValue:)

@Stateプロパティを持つ変数の初期値をinit処理で設定する

@Stateプロパティを持つ変数 はinit処理内で初期値を設定することが可能です。

init処理内で初期値を設定するには以下の2点に気をつける必要があります。

1. 初期値を設定したい変数名は「”_” + @Stateプロパティを持つ変数名 」で宣言する。
2. State(initialValue: )を使用して初期値を設定する。

実際のサンプルコードを紹介します。

@State  private var sample: String

init(){
    _sample = State(initialValue: "サンプル")
}

init内では処理を記載することもできるので、動的に初期値を設定することも可能です。

以下は配列を生成し、動的に初期値を設定する例です。

@State  var sample: String

init(){
    let array: [String] = ["A", "B", "C", "D", "E"]
    let value = array.randomElement()
    _sample = State(initialValue: value ?? "nilです")
}

実装例

ここでは先ほどの方法で@Stateプロパティを持つ変数の初期値を設定 する実装例をご紹介します。

import SwiftUI

struct ContentView: View {

    @State  var sample: String

    init(){
        let array: [String] = ["A", "B", "C", "D", "E"]
        let value = array.randomElement()
        _sample = State(initialValue: value ?? "nilです")
    }

    var body: some View {
        Text(sample)
    }
}

実際にコードを書いた感じは以下のようになります。

@Stateプロパティを持つ変数の初期値を設定するコードサンプル

表示結果

シミュレータでの実行結果

まとめ

@Stateプロパティを持つ変数 に初期値を設定するには

1. init()内で変数名を「”_” + @Stateプロパティを持つ変数名 」で宣言する。
2. State(initialValue: )を使用して初期値を設定する。

の方法で初期値を設定します。

参考文献・おすすめ文献

Apple Developerサイト-State-init(initialValue:)