emojiTheme は var body (computed property ですが、他言語ではゲッターと呼ばれるメソッドのようなものです) のローカル変数なので、@State にはできません。
前提・実現したいこと
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
回答1件
あなたの回答
tips
プレビュー