1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【SwiftUI】@Stateの動きと使い方

Last updated at Posted at 2023-10-05

まず変数(Variables)とは

変数(Variables)は、プログラムでデータや値を格納するための「箱」のようなものです。Swiftでは、varキーワードを使って変数を宣言します。変数には様々な種類のデータを格納することができます。

これらの変数には、それぞれの状態や遷移の情報が格納されています。

SwiftUIでの状態管理に用いる@State@Bindingを説明します。

@Stateとは

@Stateは、SwiftUIで状態を管理するためのプロパティラッパーです。@Stateを付けた変数は、SwiftUIのビュー内でその状態を管理します。この状態が変更されると、SwiftUIは自動的にビューを再描画します。

これらのプロパティラッパーを使うことで、SwiftUIでは簡単に状態を管理し、ビュー間でデータの受け渡しや同期が行えます。

@State使用例

例えば、「ボタンを押したらTextの文字を変える」というプログラムを考えてみましょう。この動作を実現するには、ボタンが押されたことを検知して、Textの内容を変更するための変数が必要です。

swift
import SwiftUI

struct ContentView: View {
    @State var str = "Hello, world!"
    
    var body: some View {
        VStack {
            Text(str)
                .padding()
            Button {
                str = "ハローワールド"
            } label: {
                Text("ボタン")
            }
        }
    }
}

この画面は、テキストとボタンのみが表示されるシンプルな構成です。

テキストでは、変数strの内容を表示しています。strは初めに "Hello, world!" という文字列で初期化されているため、画面には "Hello, world!" と表示されます。

ボタンをタップすると、str変数に "ハローワールド" という新しい文字列が代入され、これによりテキストの表示が "Hello, world!" ⇒ "ハローワールド" に変わります。

このように、テキストの内容をstrという変数に紐づけることで、ボタンを押すことでテキストの表示を変更することが可能になります。変数strがなければ、このプログラムは実装できません。

動きを見てみよう

ボタンをタップしたことで、str変数に "ハローワールド" という新しい文字列が代入されてテキストの表示が "Hello, world!" ⇒ "ハローワールド" に変わります。

image.png

変数に@Stateをつけると変わること

通常の変数とは異なる2つの主な点があります。

  1. 値が変わったらViewがリロードされる:
    @Stateが付いた変数を変更すると、それが反映される部分のViewが再描画されます。ボタンなどで@State変数を変更すると、Viewが再読み込みされます。もし@Stateが付いていない変数を変更しても、Viewの再描画は行われず、表示は更新されません。

  2. Structの中で値を変更できる:
    Swift言語のルール上、通常のstruct内では変数の変更ができません。しかし、@Stateを付けることでstruct内でも変数の変更が可能になります。これにより、Viewの状態を変更するたびに再描画がトリガーされます。

まとめると、@Stateはstruct内で値を変更できるようにし、変更されるたびに再描画される修飾子であると言えます。


補足

var, let の違い

varletは、Swift言語における変数宣言のためのキーワードであり、それぞれ異なる振る舞い方をします。

  1. var
    varは「variable(変数)」の略であり、変更可能な(mutable)変数を宣言する際に使用します。変数がvarで宣言されると、その値は後で変更することができます。

    var myVariable = 10
    myVariable = 20  // 値の変更が可能
    
  2. let
    letは「constant(定数)」の略であり、変更不可能な(immutable)定数を宣言する際に使用します。定数がletで宣言されると、一度値を割り当てた後はその値を変更することはできません。

    let myConstant = 30
    myConstant = 40  // これはエラーになる(定数の再代入は不可)
    

主な違いは、varで宣言した変数は後で値を変更できる(mutable)のに対し、letで宣言した定数は値を変更できない(immutable)点です。一般的には、変更される可能性がある変数はvar、一度値が設定されたら変更されない値はletを使うと良いです。また、Swiftでは、できるだけ定数を使って変更不要の変数を使用することが推奨されています。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?