swiftで見かける@Stateから始まる変数について

はじめに

swift UIを使ってIOSアプリを作るためにサンプルを見てると、@Stateから始まる変数があちらこちらに出てきます。これは一体何?というお話。

@から始まるのにAttributeじゃない!?

これまでswiftで@マークを見たらAttribute一択と信じきっていましたが、@Stateについては違うみたい。こういうのは本当にやめてほしいです。

Attributeは宣言やタイプの前に書くものですが、@Stateについてはswift UIなる画面作成方法で値を読み書きするための変数の前に付けるものです。つまり、Attributeとは全く別物なので、@マークが付いてるからってAttributeのリファレンスで@State探しても出てきません。こういうの本当にやめて欲しいです(2度目)。

それらしい説明

swift UIではViewは構造体で定義されます。このビューの中で使用する値を読み書きするためのプロパティ変数には@Stateを付けて宣言する必要があります。また、@Stateで宣言した変数に値を書き込むためには、変数の前に$を付ける必要があります。

実際の使用例

以下の例ではisPlayingとuserTextという二つのプロパティ変数が宣言されています。userTextについては使用する際に$を付けることで、この変数にテキストフィールドに入力した内容の書き込みを行なっています。

import SwiftUI

struct ContentViewView {
    // ここに@Stateが来る
    @State private var isPlaying: Bool = false
    @State private var userText:String = ""

    var body: some View {
        
        VStack {
            Button(isPlaying ? "Pause" : "Play") {
                isPlaying.toggle()
            }
            .padding()
            .border(.blue)
            TextField("何かメッセージを入力してね", text: $userText)
                .multilineTextAlignment(TextAlignment.center)
                .border(.blue)
                .padding()
        }
    }
}

まとめ

swift UIを使う上で画面を操作したり入力内容を保持するためのプロパティには@Stateを付けて宣言する+書き込みには$を付けるというのを覚えておけば何とかなりそう。@を見ても必ずしもAttributeとは限らないってことで。。。

この記事が気に入ったらサポートをしてみませんか?