Skip to content

SwiftUI_ui_state

kobayashiharuto edited this page Aug 17, 2021 · 6 revisions

State について

アプリの画面が更新できない!

Button を押したらテキストのメッセージを変更する View 作ってみよー」

struct ContentView: View {
  var message = "HELLO!"
  
  var body: some View {
    VStack {
      Text(message)
      Button("m") {
        message = "GOODBYE!"
      }
    }
  }
}

なんでや!エラーになるやないか!
let じゃねえのになんで変えられないんだ!




何のエラーなんや

エラーメッセージは self is immutable と言っていますね。
selfself.message とかで使われる self のことです。
つまり、ここでいう selfContentView のことですね。
そして、immutable は「不変」という意味です。

つまり、このエラーメッセージは言い換えると
ContentView は不変だよ。だからプロパティは変更できないよ。」 と言っているわけです。

これは、ContentView が構造体だからです。 struct は写真のようなものということを思い出してください。
写真は一度撮った後、その被写体が移動しようが変わることはありませんね。
それと同じで、struct のプロパティは変えることができないのです。

もう一度写真を撮る以外はね。



State を使おう

こんな時は、@State を使いましょう。
これをつけたプロパティの値が更新されると、写真を撮り直してくれます!
これにより、新しいプロパティの更新が画面に反映されます。

struct ContentView: View {
  @State var message = "HELLO!"
  
  var body: some View {
    VStack {
      Text(message)
      Button("m") {
        message = "GOODBYE!"
      }
    }
  }
}

これにより、ボタンを押すと message が更新されるようになりました!

Clone this wiki locally