はじめに
最近参加したハッカソンで,初めてswiftを使ってiosアプリを作りました.SwiftUIを使ったのですが,そこで変数への代入で詰まったので,自分なりにまとめてみました.
SwiftUI
SwiftUIとは,このようにViewの中で変数の宣言や,if文を用いた分岐が使える優れ物です.
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()
}
ただ,直感と勢いで変数に値を入れようとすると,エラーが出ます.
例えば,次のようなコード
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の中で変数の代入しちゃダメだよ」と書きましたが,例外があります.それは,モディファイアの中なら書くことができるということです.
改良したコードを下に示します.
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の変数への代入についてでした.