【SwiftUI】@Stateの基本的な使い方 (PropertyWrapper)

SwiftUI

はじめに

今日はSwiftUIについて勉強していきます。

SwiftUIで@がついた変数をPropertyWrapperというらしいですが、その1つに@Stateがあります。

今回は@Stateについて基本的な使い方について共有しようと思います。

構文

@Stateを頭につけて、あとは普通に変数宣言するだけ

@State var hoge: Bool = false

初期値が必要なので↑のように初期値入れるか、イニシャライザ(init)で渡して初期化するようがあります。

イニシャライザで変数を初期化する方法

他Viewから渡された変数で初期化する場合はState(initialValue: 引数)とします。

    @State var text: String
    
    init(str: String) {
        _text = State(initialValue: str)
       // text = str これだとエラーになる時がある
    }

直接代入してもエラーになるときとそうでない時があります。理由は不明。。

TextField/Toggleで使う

中身が動的に変わるViewの引数にBinding<XXXX>が絶対あります。

その引数に指定する変数は@State@Bindingにしないといけません。

例えばTextFieldを使う場合はこんな感じで使います。

    @State var text: String = ""
            
    var body: some View {
        
        VStack {
            TextField("プレースホルダー", text: $text)        
        }

    }

TextFieldのtext:に対応する型はBinding<String>です。

もちろん@Stateをついていないとコンパイルエラーになります。

Cannot find '$text' in scope

おわりに

最後まで見ていただきヘペトナス!

読者登録・Twitterのフォローもお願いします。