質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%

Q&A

解決済

1回答

1142閲覧

SwiftUIで変数に@Stateを付けたいのですがエラーが出ます

mnkd

総合スコア37

0グッド

0クリップ

投稿2022/03/12 07:37

前提・実現したいこと

SwiftUIの勉強をしています。
スタンフォード大学がYouTubeで配信している講義を進めています。
下のボタンを押すことでカードにセットする配列を切り替えたいです。

発生している問題・エラーメッセージ

変数emojiThemeに@Stateを付けてボタンを押したときにビューを更新したいと思っているのですがエラーが出てしまいます。

Closure containing a declaration cannot be used with result builder 'ViewBuilder'``` ### 該当のソースコード ```SwiftUI import SwiftUI struct ContentView: View { var emojis1 = ["🚃","🚂","⛵️","🚗","🚆","🛶","⛴","🛸","🚍","🛰","✈️","🚀","🏎","🚓","🚑","🚜","🛴","🚲","🚚","🚒","🚢","🚛","🛺","🛵","🛻"] var emojis2 = ["👮‍♀️","👳‍♀️","👩‍🎓","👷‍♂️","👨‍💻","👩‍🚒","🧛‍♂️","🧞‍♂️","👩‍🎨","👩‍🍳"] var emojis3 = ["⚽️"] @State var emojiCount = 8 var body: some View { @State var emojiTheme = emojis1 VStack { Text("Memorize!") .font(.largeTitle) ScrollView { LazyVGrid(columns: [GridItem(.adaptive(minimum: 65))]) { ForEach(emojiTheme.shuffled()[0..<emojiCount], id: \.self) { emoji in CardView(content: emoji).aspectRatio(2/3,contentMode: .fit) } } } .foregroundColor(/*@START_MENU_TOKEN@*/.red/*@END_MENU_TOKEN@*/) HStack { Spacer() VStack { Image(systemName: "car").font(.largeTitle) Text("Vehicles").font(.caption) } .foregroundColor(.blue) .onTapGesture(perform: { emojiTheme = emojis1 }) Spacer() VStack { Image(systemName: "person").font(.largeTitle) Text("People").font(.caption) } .foregroundColor(.blue) .onTapGesture { emojiTheme = emojis2 } Spacer() VStack { Image(systemName: "questionmark.circle").font(.largeTitle) Text("theme3").font(.caption) } .foregroundColor(.blue) .onTapGesture(perform: { emojiTheme = emojis3 }) Spacer() } .padding(.horizontal) } .padding(.horizontal) } } struct CardView: View { var content: String @State var isFaceUp: Bool = true var body: some View { ZStack { let shape = RoundedRectangle(cornerRadius: 20) if isFaceUp { shape.fill().foregroundColor(.white) shape.strokeBorder(lineWidth: 3) Text(content).font(.largeTitle) } else { shape.fill() } } .onTapGesture { isFaceUp = !isFaceUp } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }

試したこと

色々調べてみたのですがわかりませんでした。

補足情報(FW/ツールのバージョンなど)

Xcode ver.13.2.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2022/03/12 08:54

emojiTheme は var body (computed property ですが、他言語ではゲッターと呼ばれるメソッドのようなものです) のローカル変数なので、@State にはできません。
guest

回答1

0

自己解決

ありがとうございます!
その辺よくわかっていなかったので再度勉強し直します。
ありがとうございました。

投稿2022/03/18 12:28

mnkd

総合スコア37

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問