0
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?

SwiftUIの変数への代入で詰まった話

Posted at

はじめに

最近参加したハッカソンで,初めてswiftを使ってiosアプリを作りました.SwiftUIを使ったのですが,そこで変数への代入で詰まったので,自分なりにまとめてみました.

SwiftUI

SwiftUIとは,このようにViewの中で変数の宣言や,if文を用いた分岐が使える優れ物です.

ContentView.swift
import SwiftUI

struct ContentView: View {
    // 変数の宣言
    @State private var hensu: Int = 0
    var body: some View {
        // if文での分岐処理
        if(hensu == 0){
            Text("Hello World!!")
        }
        else{
            Text("こんにちは")
        }
    }
}
#Preview {
    ContentView()
}

ただ,直感と勢いで変数に値を入れようとすると,エラーが出ます.
例えば,次のようなコード

ContentView.swift
import SwiftUI

struct ContentView: View {
    // 変数の宣言
    @State private var hensu: Int = 0
    var body: some View {
        // if文での分岐処理
        if(hensu == 0){
            Text("Hello World!!")
            // 変数hensuに1を代入
            hensu = 1 //ここでエラー
        }
        else{
            Text("こんにちは")
        }
    }
}

#Preview {
    ContentView()
}

エラー文は「Type '()' cannot conform to 'View'」.内容を意訳すると「Viewの中で変数の代入しちゃダメだよ」って感じですね.

解決法

Swifter(Swiftめっちゃできる人)に教わった方法を紹介します.
エラー文の意訳で,「Viewの中で変数の代入しちゃダメだよ」と書きましたが,例外があります.それは,モディファイアの中なら書くことができるということです.
改良したコードを下に示します.

ContentView.swift
import SwiftUI

struct ContentView: View {
    // 変数の宣言
    @State private var hensu: Int = 0
    var body: some View {
        // if文での分岐処理
        if(hensu == 0){
            Text("Hello World!!")
                .onAppear(){
                    // 変数hensuに1を代入
                    hensu = 1
                } 
        }
        else{
            Text("こんにちは")
        }
    }
}

#Preview {
    ContentView()
}

.onAppearというモディファイアは,対象のView(今回はText("Hello World!!"))が表示された時に,一回だけ実行される処理を書くことができます.
この.onAppearのようなモディファイアの中なら,変数に値を代入することができます.

おわりに

SwiftUIを使い始めて,最初の方で躓いて,結構悩んだ内容だったのでまとめてみました.
普通のプログラミング言語を書くような勢いで書くと,絶対引っかかるなと思いました.
変数に代入する方法は,他にもあるとは思いますが,一番自分的にわかりやすく書きやすかったので,この方法を紹介しました.
以上,SwiftUIの変数への代入についてでした.

0
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
0
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?