Rubyから学習を始めた身としては衝撃でした
ざっくり結論
SwiftUIにおいてビューの状態を保持するために使用される変数
ビュー内で値が変更されると自動的に再描画される
解説
より引用
@StateはSwiftUIの大きな特徴であるデータバインディングという仕組みの1つです。
データとViewを紐付けることでデータの更新時に自動的にViewも更新されるという連動的な仕組みがデータバインディングの特徴です。
また、@Stateが付与されたプロパティは”状態変数“とも呼ばれます。
@stateを用いて状態変数を定義することで、その中の値が変わった際に、自動的にviewに反映される
使い方
状態変数を@State
で指定すれば良い
先の引用元にも事例は載っていますが、他にも以下のような使い方が出来る
.swift
struct ContentView: View {
//状態変数textを定義
@State var text = "Hello, World!"
var body: some View {
VStack {
Text(text)
.font(.largeTitle)
//Buttonを押すことで、テキストメッセージがHello, SwiftUI!に変わる
Button("Change Text") {
self.text = "Hello, SwiftUI!"
}
}
}
}
.swift
struct ContentView: View {
//Boolean型の状態変数isOnを定義
@State private var isOn = false
var body: some View {
VStack {
//isOnがtrueの場合は "ON"、falseの場合は "OFF" と表示
Text(isOn ? "ON" : "OFF")
.font(.title)
//タップされるたびに「isOn」の値が反転、false => true, true => false
Button("Toggle") {
self.isOn.toggle()
}
}
}
}
参照