-
Notifications
You must be signed in to change notification settings - Fork 0
SwiftUI_ui_state
kobayashiharuto edited this page Aug 17, 2021
·
6 revisions
「Button
を押したらテキストのメッセージを変更する View 作ってみよー」
struct ContentView: View {
var message = "HELLO!"
var body: some View {
VStack {
Text(message)
Button("m") {
message = "GOODBYE!"
}
}
}
}
なんでや!エラーになるやないか!
let
じゃねえのになんで変えられないんだ!
エラーメッセージは self is immutable
と言っていますね。
self
は self.message
とかで使われる self
のことです。
つまり、ここでいう self
は ContentView
のことですね。
そして、immutable
は「不変」という意味です。
つまり、このエラーメッセージは言い換えると
「ContentView
は不変だよ。だからプロパティは変更できないよ。」
と言っているわけです。
これは、ContentView
が構造体だからです。
struct
は写真のようなものということを思い出してください。
写真は一度撮った後、その被写体が移動しようが変わることはありませんね。
それと同じで、struct
のプロパティは変えることができないのです。
もう一度写真を撮る以外はね。
こんな時は、@State
を使いましょう。
これをつけたプロパティの値が更新されると、写真を撮り直してくれます!
これにより、新しいプロパティの更新が画面に反映されます。
struct ContentView: View {
@State var message = "HELLO!"
var body: some View {
VStack {
Text(message)
Button("m") {
message = "GOODBYE!"
}
}
}
}
これにより、ボタンを押すと message
が更新されるようになりました!